我正在编写 Javascript,它需要这些事件按以下顺序发生:
- 同时触发多个 API 调用
- 所有调用完成且响应返回后,执行一行代码
听起来很简单,但棘手的部分是我不能使用 Promises.all() 因为我仍然希望在所有承诺都已履行(无论成功与否)后执行该行代码。除非我误解了 Promises.all(),否则一次失败就会导致该行代码在 then() 中不执行,而在 error() 中执行得太快。
我很可能会遗漏一些明显的东西,但我能看到的唯一其他方法是将 API 调用承诺链接在一起,但这会导致不会立即触发它们。所以基本上我认为我需要一个不是“快速失败”的 Promises.all() 版本。
执行此操作的正确方法是什么?
要严格使用 ES6 Promise 来做到这一点,您需要将每个 Promise 包装在另一个包装器 Promise 中,当包装的 Promise 被履行或拒绝时,该 Promise 就会得到解决。
你可以这样做:
Promise.all(
promises.map( promise => Promise.resolve( promise ).catch( _=>_ ) )
).then ( function ( ) {
// All promises finished
} );
这假设promises
是承诺和/或值的数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)