我正在开发应用程序,但遇到了问题。我想在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
任何想法如何实现这一目标?会很有帮助的。
答案 0 :(得分:0)
等待第一个异步函数完成,然后调用第二个
for(var i = 0;i < 5; i++){
f1().then(res => {
return f2()
}
}
这不能保证您想要的输出,但是可以保证在调用f2
之后对f1
进行了调用
注意:您可以将所有的诺言收集到一个数组中,如果想知道所有诺言何时完成,可以致电Promise.all
。