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

标签 javascript angularjs angular-promise

我有两个彼此独立的 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/

相关文章:

javascript - 从 AngularJS 中的 Promise.then() 返回 API 响应

angularjs - Angular 2 : Binding to Functions from Component Templates

javascript - 在 Angular js中获取index.php内容

javascript - 打开设备时Pouchdb查询不过滤KEY

javascript - 在转到下一个对象后让 angular.forEach 等待 promise

javascript - 使用 JavaScript 设置 gridview 内文本框的格式

javascript - Facebook Graph 获取用户生活事件

javascript - 在同一函数中解决 promise 后返回 promise

javascript - 如何保存调整后的 d3.js 可视化?

javascript - 如何在单击按钮时滚动回页面顶部?