假设以下语句已按此顺序执行:
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(使用前将#替换为@)