天天看點

Deferred 異步模型

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

傳統的 Ajax 調用

$.ajax() 在預設的情況下是以非阻塞的方式調用的,即 async = true,這裡所說的異步,既是在業務層面的異步,也就是頁面同步加載完架構後再加載資料的這種模式,又是在代碼層面的異步,ajax 函數立即會傳回,然後執行下一條語句。

在傳統的 Ajax 調用時,我們可以将請求寫在一個 settings 裡面,然後直接傳遞給 ajax(),這個 settings 包含了請求的 url 位址和當傳回資料後執行的回調函數。在下面的代碼中,當 test.html 傳回正常時,就會彈出框提示成功調用。

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

           

如果需求想要在頁面傳回的時候做更多的事情,那麼我們需要在 success 裡面添加函數,可能再會嵌套一層代碼,可能讓代碼變得混亂。

全新的鍊式寫法

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

那麼采用全新的鍊式寫法以後,減少了回調的嵌套,代碼可讀性變得更高了。

參考文檔

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

版權聲明:本文為CSDN部落客「weixin_33720956」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33720956/article/details/91967552