我需要一个接一个地执行一系列异步函数。
我想在 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
);