对一系列异步函数进行计时



我需要一个接一个地执行一系列异步函数。

我想在 10 秒后停止瀑布,即使最后几个功能还没有完成。

这是我能想到的唯一解决方案:

async function () {
  let timeout = false
  setTimeout(() => {
    timeout = true
  }, 10 * 1000)
  let a = await firstPromise()
  if (timeout) return
  let b = await secondPromise(a)
  if (timeout) return
  let c = await thirdPromise(b)
  if (timeout) return
  let d = await fourthPromise(c)
  // and so forth
}

这是解决问题的最优雅的方法吗?

我认为

你的方法非常棒。可以进一步概括它,但这只有在您的过程确实非常通用时才有效,除非您有几个不同的地方可以重用这个确切的过程,否则我可能不会使用它。

async foo (...funcs) {
  let timeout = false
  setTimeout(() => {
    timeout = true
  }, 10 * 1000)
  let lastResult;
  for(func of funcs) {
    lastResult = await func(lastResult);
    if (timeout) return;
  }
}
foo(
  firstPromise,
  secondPromise,
  thirdPromise,
  fourthPromise
);

相关内容

最新更新