gpt4 book ai didi

javascript - 循环中的异步方法如何顺序执行?

转载 作者:行者123 更新时间:2023-11-30 19:25:11 25 4
gpt4 key购买 nike

我想多次从数据库中获取数据。如何设置循环以 200 毫秒的间隔执行 getData() 函数。如果其中一个成功,其余的将不会被触发。它是异步方法,与此处的问题不同:Asynchronous Process inside a javascript for loop

for(var i = 0; i < 3; i++){
setTimeout(getData,200);}

这将导致输出时间间隔非常接近而不是 200 毫秒,因为它们是异步的。短时间内触发三个“setTimeout”。如0.001s 0.002s 0.003s,输出时间为0.201,0.202,2.203。

getData() 返回一个 promise 。但只要能正常工作就可以正常使用。

最佳答案

您可以通过在执行下一个 setTimeout 之前等待 setTimeout 完成来完成此操作

我不认为这可以通过回调实现,setTimeout 就是这种情况,因此您应该将其转换为基于 promise 的调用

const promiseSetTimeout = timeout => new Promise(r => setTimeout(r, timeout));

const waitManyTimes = async () => {
for(let i = 0; i < 3; i++) {
await promiseSetTimeout(200);
// do something here, like getDB
console.log(i);
}
}

waitManyTimes();

关于javascript - 循环中的异步方法如何顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56978584/

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