我需要一个接一个地执行一系列异步函数。
我想在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
}
这是解决这个问题最优雅的方法吗?
答案 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
);