Deferred 異步模型

Deferred 在 jQuery 和 Twisted 框架中都有出現,其思想都是類似的,如下以 Jquery 來寫。html

傳統的 Ajax 調用

$.ajax() 在默認的狀況下是以非阻塞的方式調用的,即 async = true,這裏所說的異步,既是在業務層面的異步,也就是頁面同步加載完框架後再加載數據的這種模式,又是在代碼層面的異步,ajax 函數當即會返回,而後執行下一條語句。jquery

在傳統的 Ajax 調用時,咱們能夠將請求寫在一個 settings 裏面,而後直接傳遞給 ajax(),這個 settings 包含了請求的 url 地址和當返回數據後執行的回調函數。在下面的代碼中,當 test.html 返回正常時,就會彈出框提示成功調用。ajax

// 來自參考文檔
$.ajax({
    url: "test.html",
    success: function(){
      alert("成功調用");
    },
    error:function(){
      alert("調用出錯");
    }
  });

若是需求想要在頁面返回的時候作更多的事情,那麼咱們須要在 success 裏面添加函數,可能再會嵌套一層代碼,可能讓代碼變得混亂。segmentfault

全新的鏈式寫法

$.ajax("test.html")
  .done(function(){ alert("成功調用"); })
  .fail(function(){ alert("調用出錯"); })
   .done(function(){ alert("第二個回調函數!");} );

那麼採用全新的鏈式寫法之後,減小了回調的嵌套,代碼可讀性變得更高了。框架

參考文檔

-jQuery的deferred對象詳解 -JavaScript Promise 告別異步亂嵌套異步

相關文章
相關標籤/搜索