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

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

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

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

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

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

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

  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-28
?
慕运维8079593

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

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

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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号