萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> 數據庫綜合 >> jQuery Deferred對象介紹

jQuery Deferred對象介紹

今天為大家介紹的是jQuery Deferred對象介紹,希望大家會喜歡。

$.Deferred的實現

創建三個$.Callbacks對象,分別表示成功,失敗,處理中三種狀態

創建了一個promise對象,具有state、always、then、primise方法

通過擴展primise對象生成最終的Deferred對象,返回該對象

$.when的實現

接受若干個對象,參數僅一個且非Deferred對象將立即執行回調函數

Deferred對象和非Deferred對象混雜時,對於非Deferred對象remaining減1

Deferred對象總數 = 內部構建的Deferred對象 + 所傳參數中包含的Deferred對象

所傳參數中所有Deferred對象每當resolve時remaining減1,直到為0時(所有都resolve)執行回調

這就是$.Deferred和$.when的全部了,各個方法及使用稍後介紹。

代碼閱讀中會發現then和when方法的實現最難理解,看多次,後感回味無窮,非常巧妙。then內部會用到不同尋常的遞歸,when用到了計數,每次異步成功後減一,直到為0後表示全部異步操作成功,這時才可執行回調。

上面提到Deferred裡有3個$.Callbacks的實例,Deferred自身則圍繞這三個對象進行更高層次的抽象。以下是Deferred對象的核心方法

done/fail/progress 是 callbacks.add,將回調函數存入

resolve/reject/notify 是 callbacks.fire,執行回調函數(或隊列)

下面舉一些示例看看如何使用Deferred對象。

一、done/resolve

function cb() {

alert('success')

}

var deferred = $.Deferred()

deferred.done(cb)

setTimeout(function() {

deferred.resolve()

}, 3000)

在HTTP中表示後台返回成功狀態(如200)時使用,即請求成功後可執行成功回調函數。

二、fail/reject

function cb() {

alert('fail')

}

var deferred = $.Deferred()

deferred.fail(cb)

setTimeout(function() {

deferred.reject()

}, 3000)

在HTTP中表示後台返回非成功狀態時使用,即請求失敗後可執行失敗回調函數。

三、progress/notify

function cb() {

alert('progress')

}

var deferred = $.Deferred()

deferred.progress(cb)

setInterval(function() {

deferred.notify()

}, 2000)

在HTTP中表示請求過程中使用,即請求過程中不斷執行回調函數。這可用在文件上傳時的loading百分比或進度條。

以上就是我們為大家准備的jQuery Deferred對象介紹的相關內容,希望對大家可以有所幫助。

copyright © 萬盛學電腦網 all rights reserved