在 for 循环中使用 async/await 不会等待异步方法调用



我的异步方法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!!!!!

最新更新