为什么代码以这种方式打印?
等待不能在循环下使用吗?
>>>>> START
1
预期结果为'>>>>> START 1 2 3 >>>>> END'
let arr = [1, 2, 3]
async function print() {
for (let n of arr) {
await new Promise(
resolve => {
setTimeout(() => {
console.log(n);
resolve;
}, 1000)
}
);
}
}
async function main() {
console.log(">>>>> START");
await print();
console.log(">>>>> END");
}
main()
答案 0 :(得分:0)
简单的错字,您没有调用resolve
函数。您需要实际调用它,否则您的承诺将永远无法解决,您的代码将永远不会继续(请注意,在resolve
函数中,print
之后加上括号):
async function print() {
for (let n of arr) {
await new Promise(
resolve => {
setTimeout(() => {
console.log(n);
resolve(); // invoke the function
}, 1000)
}
);
}
}
此外,每个console.log
调用都会在新行上打印,因此输出将不会完全符合您的期望,而是更像是:
>>>>> START
1
2
3
>>>>> END