Promise 回调按什么顺序触发?

2023-12-03

假设以下语句已按此顺序执行:

promiseA.then(function() { console.log('A1'); });
promiseB.then(function() { console.log('B'); });
promiseA.then(function() { console.log('A2'); });

Now promiseA已实现其次是 promiseB.

它是否在规范中定义(是this最新规范?)三个回调按什么顺序触发?

Will A1总是在之前触发A2? (更新:是的,根据 2.2.6.1这个规格,正如指出的那样这个答案.)

Will A1/A2总是在之前触发B(因为A先于B实现)?


A1/A2 是否总是在 B 之前被触发(因为 A 在 B 之前被满足)?

不,不一定。回调的顺序仅根据 Promise 定义。甚至有可能在A1和A2之间触发B。

无论如何,这实际上没有意义,因为通常你没有意义know that promiseA之前已满足promiseB。你只能依靠它,当promiseB源自promiseA- 那么 B 的回调保证在 A 上导致 B 的“派生回调”之后被调用。

因此,如果您需要保证仅在 A1 和 A2 之后发出回调(因为它依赖于它们的结果),您应该这样做

var promiseA1 = promiseA.then(function(a) { console.log('A1'); return 'A1'; });
var promiseA2 = promiseA.then(function(a) { console.log('A2'); return 'A2'; });
Promise.all([promiseB, promiseA1, promiseA2]).spread(function(b, a1, a2) {
    console.log('B after ', a1, a2);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Promise 回调按什么顺序触发? 的相关文章