我想问为什么这个异步循环有效,但是当我改变它以使用函数作为参数时,它只打印出1个测试,然后只是跳到最后,就像没有任何反应一样。任何的想法 ?是因为功能只能使用一次或?或者你有更好的方法如何按顺序进行异步循环?
let array=[10,9,7,6,5,4];
fnBlockLoop(array)
function timeoutTest(delay){
return new Promise((resolve)=>{
console.log("testing")
setTimeout(resolve,delay)
})
}
async function fnBlockLoop(input,func){
for(const item of input){
let test = await timeoutTest(2000);
console.log(test)
}
console.log("done")
}
2
let array=[10,9,7,6,5,4];
fnBlockLoop(array,timeoutTest(2000))
function timeoutTest(delay){
return new Promise((resolve)=>{
console.log("testing")
setTimeout(resolve,delay)
})
}
async function fnBlockLoop(input,func){
for(const item of input){
let test = await func;
console.log(test)
}
console.log("done")
}
答案 0 :(得分:1)
你想要的是传递函数参考timeoutTest
。您目前所做的是传递函数调用timeoutTest( 2000 )
的结果。后者是Promise
,只能解析一次。
要传递实际的函数参考,你必须选择:
fnBlockLoop(array, async function(){ await timeoutTest(2000) } )
fnBlockLoop()
函数进行一些调整:fnBlockLoop(array, timeoutTest, 2000 )
答案 1 :(得分:0)
您应该像这样传递函数引用。
let array=[10,9,7,6,5,4];
fnBlockLoop(array,timeoutTest)
function timeoutTest(delay){
return new Promise((resolve)=>{
console.log("testing")
setTimeout(resolve,delay)
})
}
async function fnBlockLoop(input,func){
for(const item of input){
let test = await func(2000);
console.log(test)
}
console.log("done")
}