3 回答
TA贡献2021条经验 获得超8个赞
这取决于承诺的执行。如果我们检查规格。您可以在此处找到最终规格-由于该答案最初是撰写的,因此已经确定。
这是相关的摘录(您可以在此处找到原始来源)
设完成为Call(执行者,未定义,«resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]»)。
如果完成是突然完成,则
令status为Call(resolvevingFunctions。[[Reject]],undefined,«completion。[[value]]»)。
ReturnIfAbrupt(状态)。
ES6标准指出,承诺的实现始终是异步的(请参见25.4.5.3 Promise.prototype.then
节和随附的25.4.5.3.1节PerformPromiseThen
)。我将相关材料放在下面。
然后履行承诺
否则,如果promise的[[PromiseState]]内部广告位的值“已实现”,
令value为promise的[[PromiseResult]]内部广告位的值。
执行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,«fulfillReaction,value»)。
否则,如果promise的[[PromiseState]]内部广告位的值被“拒绝”,
假设reason为promise的[[PromiseResult]]内部广告位的值。
执行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,«rejectReaction,reason»)。
TLDR:传递给promise的函数是同步执行的,但是后续then
调用始终是异步执行的。
TA贡献1811条经验 获得超5个赞
因为Promise可以很好地构成并为该行为提供统一的抽象。否则,您只会得到回调汤。仅仅因为组件的行为简单,并不意味着您不需要该组件。例如,Array.forEach
很可能只是循环的标准。但是Array.forEach
看起来更好,并且允许用户不必担心for循环的实现以使用它。
添加回答
举报