JQuery日记6.7 Javascript异步模型(二)
2014-06-06 20:59 尔 阅读(140) 评论(0) 收藏 举报异步模型看起来很美,但其实它也是有天生缺陷的.看下面代码
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:
$('ajax').then(successHandler, errorHandler)
老式ajax:
$('ajax',function(result){ process(result); })
于是很多大牛就提出了Promises模式来解决异步函数的编程风格和上面提到的两个缺陷,对应到JQuery里的实现就是Callbacks模块和Deferred,Callbacks用来存储触发回调函数,Deffered就是Promises模式的具体实现.