jquery源碼中Deferred的定義的理解



一、jquery源碼中Deferred的定義

 

jQuery.extend({
    Deferred: function( func ) {
        var tuples = [
                // action, add listener, listener list, final state
                [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
                [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
                [ "notify", "progress", jQuery.Callbacks("memory") ]
            ],
        ...
 
        // All done!
        return deferred;
    },
    // Deferred helper
    when: function( subordinate /**//* , , subordinateN */ ) {
        var i = 0,
            resolveValues = core_slice.call( arguments ),
            length = resolveValues.length,
            ...
 
        return deferred.promise();
    }
});




二、Deferred定義的說明



1、$.Deferred的實現


(1)、創建三個$.Callbacks對象,分別表示成功,失敗,處理中三種狀態
(2)、創建了一個promise對象,具有state、always、then、primise方法
(3)、通過擴展primise對象生成最終的Deferred對象,返回該對象


 


2、$.when的實現


(1)、接受若干個對象,參數僅一個且非Deferred對象將立即執行回調函數
(2)、Deferred對象和非Deferred對象混雜時,對於非Deferred對象remaining減1
(3)、Deferred對象總數 = 內部構建的Deferred對象 + 所傳參數中包含的Deferred對象
(4)、所傳參數中所有Deferred對象每當resolve時remaining減1,直到爲0時(所有都resolve)執行回調


 


 參考資料 : jquery源碼中Deferred的定義的理解   http://www.studyofnet.com/news/1223.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章