在forEach循环中同步运行异步JavaScript函数

时间:2020-04-14 09:10:35

标签: javascript reactjs asynchronous foreach async-await

我正在开发应用程序,但遇到了问题。我想在forEach循环中运行两个函数,这意味着每次迭代都运行两个函数一次。

考虑起来这很简单,但是我的函数是异步的,我的第一个函数需要在第二个函数执行之前完成。

之所以我使这些功能异步,是因为在我的应用中这些功能代表一个API调用。

我将向您展示一个简单的示例,其中我使用setTimeout()而不是API调用。

async function f(){
  await setTimeout(()=>{
    console.log("FIRST")
  },1000)
}

async function f2(){
  await setTimeout(()=>{
    console.log("SECOND")
  },3000)
}

for(var i = 0;i < 5; i++){
  f() 
  f2()
}

运行此命令时,输出为:

FIRST
FIRST
FIRST
FIRST
FIRST
SECOND
SECOND
SECOND
SECOND
SECOND

我需要我的输出是:

FIRST
SECOND
FIRST
SECOND
FIRST
SECOND
FIRST
SECOND
FIRST
SECOND

任何想法如何实现这一目标?会很有帮助的。

1 个答案:

答案 0 :(得分:0)

等待第一个异步函数完成,然后调用第二个

for(var i = 0;i < 5; i++){
  f1().then(res => {
   return f2()
  }
}

这不能保证您想要的输出,但是可以保证在调用f2之后对f1进行了调用

注意:您可以将所有的诺言收集到一个数组中,如果想知道所有诺言何时完成,可以致电Promise.all