Closed. This question is opinion-based。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
                        
                        2年前关闭。
                                                                                            
                
        
我需要一个接一个地执行一系列异步函数。

我想在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
);

关于javascript - 超时一系列异步功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48218261/

10-11 23:06
查看更多