Promise构造函数回调是否异步执行?

假设我有这段代码


function y(resolve, reject)

{

  console.log("Result");

  resolve();

}  


var promise = new Promise(y);

我想知道的是该函数是否y将异步执行。


largeQ
浏览 627回答 3
3回答

宝慕林4294392

这取决于承诺的执行。如果我们检查规格。您可以在此处找到最终规格-由于该答案最初是撰写的,因此已经确定。这是相关的摘录(您可以在此处找到原始来源)设完成为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调用始终是异步执行的。

四季花海

因为Promise可以很好地构成并为该行为提供统一的抽象。否则,您只会得到回调汤。仅仅因为组件的行为简单,并不意味着您不需要该组件。例如,Array.forEach很可能只是循环的标准。但是Array.forEach 看起来更好,并且允许用户不必担心for循环的实现以使用它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript