Jquery Deffer對(duì)象是一種異步編程工具,它可以讓代碼處理時(shí)間變得更加靈活。Deffer對(duì)象的基本概念是:它允許你在代碼執(zhí)行期間注冊(cè)一個(gè)或多個(gè)回調(diào)函數(shù),這些回調(diào)函數(shù)在條件達(dá)成時(shí)被調(diào)用。
var deferred = $.Deferred(); $.ajax({ url: 'http://example.com/', dataType: 'jsonp', success: function(data){ // 成功時(shí),改變deferred對(duì)象狀態(tài) deferred.resolve(data); }, error: function(xhr, status, error){ // 失敗時(shí),改變deferred對(duì)象狀態(tài) deferred.reject(status); } }); deferred.done(function(data){ // 這個(gè)回調(diào)函數(shù)會(huì)在deferred對(duì)象狀態(tài)變?yōu)閒ulfilled時(shí)被調(diào)用 }); deferred.fail(function(status){ // 這個(gè)回調(diào)函數(shù)會(huì)在deferred對(duì)象狀態(tài)變?yōu)閞ejected時(shí)被調(diào)用 }); deferred.always(function(){ // 這個(gè)回調(diào)函數(shù)會(huì)在deferred對(duì)象狀態(tài)變化時(shí)被調(diào)用,無(wú)論是fulfilled還是rejected });
上面是一個(gè)典型的Jquery Deffer對(duì)象的例子。在這個(gè)例子中,我們首先創(chuàng)建了一個(gè)deferred對(duì)象,然后使用$.ajax函數(shù)向服務(wù)器發(fā)送請(qǐng)求。當(dāng)請(qǐng)求成功時(shí),我們調(diào)用deferred.resolve方法,將deferred對(duì)象的狀態(tài)設(shè)置為fulfilled;當(dāng)請(qǐng)求失敗時(shí),我們調(diào)用deferred.reject方法,將deferred對(duì)象的狀態(tài)設(shè)置為rejected。
接下來(lái)我們可以使用deferred.done、deferred.fail和deferred.always方法注冊(cè)回調(diào)函數(shù)。當(dāng)deferred對(duì)象的狀態(tài)變化時(shí),對(duì)應(yīng)的回調(diào)函數(shù)就會(huì)被調(diào)用。例如,當(dāng)deferred對(duì)象的狀態(tài)變?yōu)閒ulfilled時(shí),我們定義的done回調(diào)函數(shù)就會(huì)被調(diào)用。
Jquery Deffer對(duì)象可以幫助我們優(yōu)雅地處理異步代碼。它的API非常豐富,包括了promise、notify、progress等方法,可以讓我們更加方便地管理異步任務(wù)。