JavaScript中传入Promise构造函数的匿名函数由谁在何时调用?
问题结论
你传入Promise构造函数的匿名函数一定会被执行,完全不需要你手动调用,也和你后续是否调用你提到的.this(推测为输入笔误,无论是什么后续调用操作)都没有关系,会直接修改myPromise的状态与值。
底层原理说明
- 你传给
Promise构造函数的这个匿名函数有统一名称叫 executor(执行器函数),这是ECMAScript规范明确规定的Promise构造逻辑:当你执行new Promise(executor)创建实例时,Promise构造函数的内部代码会同步、立刻调用你传入的这个executor函数,不需要外部做任何触发操作。 - 你给出的示例代码中,执行到
let myPromise = new Promise(...)这一行时,内部就已经完成了如下操作:- 调用你传入的匿名executor函数,自动传入
myResolve、myReject两个参数函数 - 执行函数内的逻辑,判定x为0,调用
myResolve("OK") - 将
myPromise的状态从pending直接修改为fulfilled,结果值设置为"OK"
- 调用你传入的匿名executor函数,自动传入
- 后续的
.then调用只是给已经状态敲定的Promise注册成功/失败的回调函数,和executor要不要执行没有任何关系。哪怕你删掉所有.then相关的代码,executor还是会正常执行完成,myPromise的状态和值也会被修改,只是你没有注册回调去读取这个结果而已。
内容的提问来源于stack exchange,提问作者Vahid Kamyab
相关产品推荐
相关产品推荐

