为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

largeQ 2019-12-05 15:12:23
假设我有这段代码function y(resolve, reject){  console.log("Result");  resolve();}  var promise = new Promise(y);我想知道的是该函数是否y将异步执行。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

这取决于承诺的执行。如果我们检查规格。您可以在此处找到最终规格-由于该答案最初是撰写的,因此已经确定。

这是相关的摘录(您可以在此处找到原始来源)

  1. 设完成为Call(执行者,未定义,«resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]»)。

  2. 如果完成是突然完成,则

    • 令status为Call(resolvevingFunctions。[[Reject]],undefined,«completion。[[value]]»)。

    • ReturnIfAbrupt(状态)。

ES6标准指出,承诺的实现始终是异步的(请参见25.4.5.3 Promise.prototype.then节和随附的25.4.5.3.1节PerformPromiseThen)。我将相关材料放在下面。

然后履行承诺

  1. 否则,如果promise的[[PromiseState]]内部广告位的值“已实现”,

    • 令value为promise的[[PromiseResult]]内部广告位的值。

    • 执行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,«fulfillReaction,value»)。

  2. 否则,如果promise的[[PromiseState]]内部广告位的值被“拒绝”,

    • 假设reason为promise的[[PromiseResult]]内部广告位的值。

    • 执行EnqueueJob(“ PromiseJobs”,PromiseReactionJob,«rejectReaction,reason»)。

TLDR:传递给promise的函数是同步执行的,但是后续then调用始终是异步执行的。


查看完整回答
反对 回复 2019-12-05
?
四季花海

TA贡献1811条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-12-05
  • 3 回答
  • 0 关注
  • 626 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信