3 回答

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
這取決于承諾的執(zhí)行。如果我們檢查規(guī)格。您可以在此處找到最終規(guī)格-由于該答案最初是撰寫(xiě)的,因此已經(jīng)確定。
這是相關(guān)的摘錄(您可以在此處找到原始來(lái)源)
設(shè)完成為Call(執(zhí)行者,未定義,?resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]?)。
如果完成是突然完成,則
令status為Call(resolvevingFunctions。[[Reject]],undefined,?completion。[[value]]?)。
ReturnIfAbrupt(狀態(tài))。
ES6標(biāo)準(zhǔn)指出,承諾的實(shí)現(xiàn)始終是異步的(請(qǐng)參見(jiàn)25.4.5.3 Promise.prototype.then
節(jié)和隨附的25.4.5.3.1節(jié)PerformPromiseThen
)。我將相關(guān)材料放在下面。
然后履行承諾
否則,如果promise的[[PromiseState]]內(nèi)部廣告位的值“已實(shí)現(xiàn)”,
令value為promise的[[PromiseResult]]內(nèi)部廣告位的值。
執(zhí)行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,?fulfillReaction,value?)。
否則,如果promise的[[PromiseState]]內(nèi)部廣告位的值被“拒絕”,
假設(shè)reason為promise的[[PromiseResult]]內(nèi)部廣告位的值。
執(zhí)行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,?rejectReaction,reason?)。
TLDR:傳遞給promise的函數(shù)是同步執(zhí)行的,但是后續(xù)then
調(diào)用始終是異步執(zhí)行的。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
因?yàn)镻romise可以很好地構(gòu)成并為該行為提供統(tǒng)一的抽象。否則,您只會(huì)得到回調(diào)湯。僅僅因?yàn)榻M件的行為簡(jiǎn)單,并不意味著您不需要該組件。例如,Array.forEach
很可能只是循環(huán)的標(biāo)準(zhǔn)。但是Array.forEach
看起來(lái)更好,并且允許用戶(hù)不必?fù)?dān)心for循環(huán)的實(shí)現(xiàn)以使用它。
添加回答
舉報(bào)