将具有延迟的异步 for 循环更改为同步 javascript
change asynchronous for loop with delay to synchronous javascript
我有函数内部循环的异步代码,它有这样的延迟
const timeout = ms => new Promise(res => setTimeout(res, ms))
async function sayHai() {
for (var i = 0; i < 100; i++) {
await timeout(1000);
console.log("Hai");
if ( (i%5) == 4 ) await timeout(30000);
}
}
sayHai();
我有代码生成如下:
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
delay 30 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
我希望代码是同步的,因为我想在控制台上使用它,所以我需要代码顺序执行
您要做的事情太复杂了。可以用一个简单的队列来简化。有一个调用自身并为下一次迭代使用超时的函数。
function run() {
let cnt = 0;
function next() {
cnt++;
console.log(new Date().toLocaleString())
window.setTimeout(next, cnt % 5 == 0 ? 5000 : 1000);
}
next();
}
run();
我有函数内部循环的异步代码,它有这样的延迟
const timeout = ms => new Promise(res => setTimeout(res, ms))
async function sayHai() {
for (var i = 0; i < 100; i++) {
await timeout(1000);
console.log("Hai");
if ( (i%5) == 4 ) await timeout(30000);
}
}
sayHai();
我有代码生成如下:
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
delay 30 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
我希望代码是同步的,因为我想在控制台上使用它,所以我需要代码顺序执行
您要做的事情太复杂了。可以用一个简单的队列来简化。有一个调用自身并为下一次迭代使用超时的函数。
function run() {
let cnt = 0;
function next() {
cnt++;
console.log(new Date().toLocaleString())
window.setTimeout(next, cnt % 5 == 0 ? 5000 : 1000);
}
next();
}
run();