![](/img/trans.png)
[英]Using Array Method inside ASYNC/AWAIT between API calls in Javascript
[英]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!!!!!")
有人可以幫助我理解我在這里做錯了什么!
這里有很多錯誤:
for
循環需要是for (let i = 0; i < fruitsToGet.length; i++) {
這樣你就可以聲明循環變量並在正確的位置增加它。i
,而不是index
。test().then(result => console.log(result))
來了解test()
何時實際完成,因為它是一個async
函數,因此它返回一個承諾,您必須使用.then()
或await
知道何時完成。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.