javascript - ES6 promise /在多个 promise 完成后调用函数(不能使用 Promises.all)

标签 javascript ecmascript-6 es6-promise

<分区>

我正在编写需要这些事件按此顺序发生的 Javascript:

  1. 同时触发多个 API 调用
  2. 一旦所有调用完成并且响应返回,执行一行代码

听起来很简单,但棘手的部分是我不能使用 Promises.all(),因为我仍然希望在所有 promise 都已实现(无论成功与否)之后执行该行代码。除非我误解了 Promises.all(),否则一次失败将导致代码行在 then() 中不执行,而在 error() 中执行得太快。

我很可能遗漏了一些明显的东西,但我能看到的唯一其他方法是将 API 调用 promise 链接在一起,但这会导致不会同时触发它们。所以基本上我认为我需要一个不是“快速失败”的 Promises.all() 版本。

执行此操作的正确方法是什么?

最佳答案

要严格使用 ES6 promise 来做到这一点,您需要将每个 promise 包装在另一个包装器 promise 中,当包装的 promise 被履行或拒绝时,它会得到解决。

你可以这样做:

Promise.all( 
  promises.map( promise => Promise.resolve( promise ).catch( _=>_ ) )
).then ( function ( ) {
    // All promises finished
} );

这假设 promises 是一组 promises 和/或值。

关于javascript - ES6 promise /在多个 promise 完成后调用函数(不能使用 Promises.all),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923225/

相关文章:

javascript - 更改 slideToggle 上的列表样式图像?

javascript - 固定定位点击后自行重置

reactjs - react 图库中的当前图像

javascript - 如何使用 Node Js Promise 顺序执行函数?

javascript - Node.js:何时使用 Promises 与 Callbacks

javascript - 在 JavaScript IF 语句中使用匿名函数

javascript - eclipse (juno) 中的 javascript 代码出现 java 警告 (?)

javascript - 如何在构造函数之外调用 super 构造函数?

javascript - 使用默认值的嵌套参数解构

javascript - promise 在 vscode 中异步/等待