如何并行运行异步函数,但在第一个函数解析后超时? | Promise.all 在第一次解析后超时

问题描述 投票:0回答:1

假设我有调用外部 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])
那样运行它们。

但是,我有一个稍微不同的要求:

  1. 我想并行开始所有的承诺。
  2. 一旦第一个承诺解决(无论是哪个),我想等待 500 毫秒让其他承诺解决。
  3. 在 500 毫秒的窗口之后,我想忽略任何剩余的未解决的承诺。
  4. result
    应包含在 500 毫秒窗口结束时解决的所有承诺。

因此,例如,如果

promise2
在时间
T
首先解决,我想等到
T + 500
毫秒让其他人解决。任何尚未解决的承诺都应该被忽略。

如何在 JavaScript 中完成此任务?

javascript async-await promise
1个回答
0
投票

而不是

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。

© www.soinside.com 2019 - 2024. All rights reserved.