gpt4 book ai didi

javascript - 在继续 for 循环之前等待异步执行

转载 作者:行者123 更新时间:2023-12-03 01:23:32 25 4
gpt4 key购买 nike

我想在这里找到解决问题的方法。我们需要在打印完成之前打印 5 个星号 *。

let arr = [1, 2, 3, 4, 5];

for (let i = 0; i < arr.length; i++) {
delay();
console.log('finished');
}

function delay() {
setTimeout(() => {
console.log('*');
}, 1000)
}

我能想到解决这个问题的一种方法是使用await关键字并将代码修改为如下所示

let arr = [1, 2, 3, 4, 5];

async function processArray() {
for (let i = 0; i < arr.length; i++) {
await delay();
console.log('done');
}
}

function delay() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(console.log('*'));
}, 1000)
});
}

还有哪些其他方法可以实现该目标?我想最少地改变原始代码。我刚刚开始在 Node 中进行异步编程,想知道可能的方法。另外,任何指向我可以学习和实现各种怪癖和解决方法的资源的指针都会很棒!

谢谢!

最佳答案

由于延迟函数是异步的,因此在 for 循环内调用它不会给出准确的结果。我认为你应该使用如下递归逻辑。

let i = 0;
delay(i);

function delay(i) {
if (i < 5) {
setTimeout(() => {
console.log('*');
i++;
delay(i);
}, 1000)
}
else {
console.log('finished');
}
}

关于javascript - 在继续 for 循环之前等待异步执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51645377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com