【发布时间】:2017-01-04 05:24:15
【问题描述】:
我有两个相互独立的承诺,我想在两个承诺都完成(拒绝或解决)之后执行最后一步。
$q.all() 不能使用,因为我希望 finally 始终执行(两个 Promise 只执行一次),即使任何 Promise 拒绝
一种解决方案可能是有一个计数器并有一个 finallyHandler 函数来在两个 Promise 都解决/拒绝时执行它。
var count = 0;
function finallyHandler() {
if ( ++count === 2 ) {
doStuff();
count = 0;
}
}
firstPromise.finally(finallyHandler);
secondPromise.finally(finallyHandler);
这可以工作,但看起来不对。
有没有更好的方法来做到这一点?
【问题讨论】:
-
第三个 Promise 在解决或拒绝时都解决了怎么办?这将使代码更易于阅读和维护。
-
@briosheje 有正确的想法。构建 promise 数组,以便每个 promise 都有自己的传递错误行为。
promises.push( doStuff().catch(e => e) ),然后将 Promise.all 应用到promises
标签: javascript angularjs angular-promise