JQuery日记6.7 Javascript异步模型(二)

异步模型看起来很美,但其实它也是有天生缺陷的.看下面代码


try {
      setTimeout( function(){
             throw new Error( '你抓不到我的!' );
      }, 100);
} catch (e) {
      console.error(e);
}

如果你已经理解了上一篇博客,那你一定了解了这样的写法是捕获不到错误e的,setTimeout是排在catch(e){}执行完毕后,捕获错误时压根还没执行throw new Error()当然捕获不到了.

同样的道理 我们也没法得到异步函数的返回值.
var a;
setTimeout( function(){
   a = 5;
},0);
      
console.info(a);//undefined

从编程风格上看,这样也不够友好,回调函数都直接耦合在异步函数中(虽然很多UI程序员认为这样才更习惯).
新式ajax:
$('ajax').then(successHandler, errorHandler)

老式ajax:
$('ajax',function(result){
     process(result);             
})
于是很多大牛就提出了Promises模式来解决异步函数的编程风格和上面提到的两个缺陷,对应到JQuery里的实现就是Callbacks模块和Deferred,Callbacks用来存储触发回调函数,Deffered就是Promises模式的具体实现.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值