第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Deferred總結

學完Deferred這一章,這里個人做個小總結吧。

  1. $.Deferred()返回一個deferred對象,內部還包含著狀態(tài)state, 以及promise對象。這個deferred對象中包含著三個Callbacks對象,分別管理done, fail, progress這三個狀態(tài)。并且deferred對象向外提供done, fail, progress, resolve, reject等接口,用來改變內部對應的Callbacks對象的狀態(tài)。由于Callbacks對象都是once memory結構的(progress的只是memory結構),所以只要通過resolve/reject觸發(fā)一次,那么Callbacks對象就被固定了,同時deferred對象內部的state也被確定了。當然,這時候還是可以通過done/fail來繼續(xù)給Callbacks對象添加訂閱對象,只是添加的時候就會立馬執(zhí)行(這就是memory的作用),執(zhí)行完以后Callbacks內的list又會被清空(這是once的作用),這樣就不能再通過resolve/reject觸發(fā)了。

  2. 由于memory的作用,所以就算先resolve/reject,后done/fail還是可以正常運行的。因為memory對保存resolve/reject時的參數(shù)。

  3. 個人認為then是整個Deferred中最精妙的設計。這里以一個例子說明:$.Deferred().then(fn1).then(fn2)

  4. 首先$.Deferred()會生成一個deferred對象,這里暫且稱為A。然后調用then方法,并且參數(shù)是fn1,此時會返回一個新的deferred對象,這里暫且稱為B。并且在B對象生成后,會將函數(shù)fn1通過A.done/fail/progress添加到A的Callbacks的隊列中。所以當A對象被確定后,會運行fn1函數(shù)。同時,當fn1函數(shù)運行完以后,如果fn1函數(shù)返回一個promise對象,那么這時候會創(chuàng)建一個新的deferred對象,叫C,并且將對象B的resolve/reject方法添加到C的Callbacks隊列中,等待對象C的觸發(fā)。如果fn1函數(shù)返回一個普通的結果,那么這時候就直接觸發(fā)B對象。

  5. 上述的操作就在A和B之間形成了一個鏈式調用,并且如果fn1返回promise對象,則會等待fn1運行結束以后再觸發(fā)B。當然,后面也可以繼續(xù)添加then(fn2)。過程和4一樣。

正在回答

2 回答

學到了,

0 回復 有任何疑惑可以回復我~

不錯不錯哦

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

Deferred總結

我要回答 關注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號