【发布时间】:2016-08-23 17:20:55
【问题描述】:
我正在编写需要这些事件按此顺序发生的 Javascript:
- 同时触发多个 API 调用
- 在所有调用完成并返回响应后,执行一行代码
听起来很简单,但棘手的部分是我不能使用 Promises.all() 因为我仍然希望在所有承诺都已实现(无论成功与否)之后执行该行代码。除非我误解了 Promises.all(),否则一次失败会导致代码行无法在 then() 中执行,而在 error() 中执行太快。
我很可能会遗漏一些明显的东西,但我能看到的唯一其他方法是将 API 调用承诺链接在一起,但这会导致不会一次全部触发它们。所以基本上我认为我需要一个不是“快速失败”的 Promises.all() 版本。
这样做的正确方法是什么?
【问题讨论】:
-
Promise.all() 如果多个promise有依赖关系,则将它们一个接一个地链接起来。因此,如果一个失败,它根本不会尝试其他的,并将返回到您的 catch()。如果您对拒绝案例(错误)有容忍度,那么您应该手动将您的 Promise 与 thens 和 catchs 链接起来,并通过它们的 catch() 处理被拒绝的操作,并从该 catch() 继续执行下一个 Promise。
-
不确定说它不会“尝试”其他的是否准确:当它们被传递给 Promise.all 时,它们都已经开始运行了。所以无论他们有什么行为,以及任何链接到每个单独的 .then/catch() 操作都将继续运行。
标签: javascript ecmascript-6 es6-promise