假设我有以下代码构造一个Promise
:
function doSomethingAsynchronous() {
return new Promise((resolve) => {
const result = doSomeWork();
setTimeout(() => {
resolve(result);
}), 100);
});
}
哪个时间点是doSomeWork()
叫?是紧接在之后还是作为Promise
是建造的吗?如果没有,我是否需要显式执行其他操作来确保回调运行?
立即,是的,根据规范。
From the MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise#Parameters:
执行器函数由Promise实现立即执行,传递resolve和reject函数(执行器在Promise构造函数返回创建的对象之前被调用)
这是在 ECMAScript 规范中定义的(当然,它更难阅读......)here https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-executor(截至本次编辑的第 9 步,显示执行程序是同步调用的):
- 令完成度为 Completion(调用(执行器,未定义,« resolvingFunctions.[[Resolve]], resolvingFunctions.[[Reject]] »)).
(我的重点)
这个保证可能很重要,例如当你准备几个承诺然后传递给all
or race
,或者当你的执行者有同步副作用时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)