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模式的具體實現.
相關文章
相關標籤/搜索