Deferred 在 jQuery 和 Twisted 框架中都有出現,其思想都是類似的,如下以 Jquery 來寫。html
$.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("第二個回調函數!");} );
那麼採用全新的鏈式寫法之後,減小了回調的嵌套,代碼可讀性變得更高了。框架