定时一系列异步函数

时间:2018-01-12 01:23:31

标签: javascript node.js

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

我想在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
}

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

1 个答案:

答案 0 :(得分:1)

我认为你的方法非常棒。可以进一步概括它,但这只适用于你的过程确实非常通用的我可能不会使用它,除非你有几个不同的地方可以重复使用这个过程。

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
);