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