簡體   English   中英

在 for 循環中使用 async/await 不等待異步方法調用

[英]Using async/await inside for loop is not waiting for async method calls

我的以下代碼沒有調用我的異步方法getNumFruit

const fruitsToGet = ['apple', 'grape', 'pear']
const fruitBasket = {
  apple: 27, 
  grape: 0,
  pear: 14 
}
console.log("start");




async function getNumFruit(fruit) {
   console.log("iside")
  return sleep(1000).then(v => fruitBasket[fruit])
}

async function test(){
    console.log("inside test");

  for(i=0;i++;i<fruitsToGet.length){
  console.log("start2");

    const fruit = fruitsToGet[index]
    const numFruit = await getNumFruit(fruit)
    console.log(numFruit)

  }
  return "done";
}
var result = test();
console.log(result)

console.log("end!!!!!")

有人可以幫助我理解我在這里做錯了什么!

這里有很多錯誤:

  1. 你的for循環需要是for (let i = 0; i < fruitsToGet.length; i++) {這樣你就可以聲明循環變量並在正確的位置增加它。
  2. 然后,您需要在循環中使用i ,而不是index
  3. 然后,您需要使用test().then(result => console.log(result))來了解test()何時實際完成,因為它是一個async函數,因此它返回一個承諾,您必須使用.then()await知道何時完成。
  4. 您沒有顯示函數sleep()的代碼。

看看這個修復后的代碼,你可以在這個片段中運行它來自己查看結果:

 const fruitsToGet = ['apple', 'grape', 'pear']; const fruitBasket = { apple: 27, grape: 0, pear: 14 }; console.log("start"); function sleep(t) { return new Promise(resolve => { setTimeout(resolve, t); }); } function getNumFruit(fruit) { console.log("iside") return sleep(1000).then(v => fruitBasket[fruit]); } async function test(){ console.log("inside test"); for (let i = 0; i < fruitsToGet.length; i++) { console.log("start loop invocation", i); const fruit = fruitsToGet[i]; const numFruit = await getNumFruit(fruit); console.log(numFruit); } return "done"; } test().then(result => { console.log(result); console.log("end!!!!!") });

當您運行它時,它會生成以下輸出:

start
inside test
start loop invocation 0
iside
27
start loop invocation 1
iside
0
start loop invocation 2
iside
14
done
end!!!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM