gpt4 book ai didi

javascript - 如何在 AngularJS 中为多个 Promise 提供单个最终处理程序?

转载 作者:行者123 更新时间:2023-12-03 05:19:40 24 4
gpt4 key购买 nike

我有两个彼此独立的 Promise,我想在两个 Promise 完成后执行最后一步(拒绝或解决)。

无法使用$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.all(iterable) 会做你正在寻找的事情。但是,请查看浏览器兼容性,因为 Internet Explorer 不支持此方法。来自文档:

The Promise.all(iterable) method returns a promise that resolves when all of the promises in the iterable argument have resolved, or rejects with the reason of the first passed promise that rejects.

使用您的代码示例(具有失败行为),它看起来像这样:

Promise.all([firstPromise, secondPromise]).then(values => { 
finallyHandler();
}, reason => {
finallyHandler();
});

尽管失败 block 与成功 block 相同,但成功 block 仅在所有 Promise 成功完成后运行,而失败 block 在遇到第一次失败时运行一次(且仅一次)。

引用:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

关于javascript - 如何在 AngularJS 中为多个 Promise 提供单个最终处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com