假设我有调用外部 API 的异步函数,其响应时间定义如下:
async function promise1() { /* API Call */ }
async function promise2() { /* API Call */ }
async function promise3() { /* API Call */ }
// ... up to promiseN
如果我想并行运行它们并等待它们全部解决,我会像
result = Promise.all([promise1, promise2, promise3,...,promiseN])
那样运行它们。
但是,我有一个稍微不同的要求:
result
应包含在 500 毫秒窗口结束时解决的所有承诺。因此,例如,如果
promise2
在时间 T
首先解决,我想等到 T + 500
毫秒让其他人解决。任何尚未解决的承诺都应该被忽略。
如何在 JavaScript 中完成此任务?
而不是
Promise.all
,您将需要Promise.any
(请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/any)并链接一个.then()
,将您的 500 毫秒等待封装到第二个 Promise 中,当第一个 Promise 实现后,经过 500 毫秒,循环您的 Promise 并拒绝 那些尚未实现的 Promise。