异步模型看起来非常美,但事实上它也是有天生缺陷的.看以下代码


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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。 假设你已经理解了上一篇博客,那你一定了解了这种写法是捕获不到错误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模式的详细实现.



扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄