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