javascript - 将带有延迟的异步 for 循环更改为同步 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();
推荐阅读
- python-3.x - 如何使用 Python selenium 抓取“span typeof”或“span property”数据
- wpf - 如何在自定义消息框中使用重载 (myMSGBOX.SHOW(overloads)
- laravel - How to send image API From laravel to slim
- python - Python 中的实例属性获取器
- sql - Column doens't exists in PostgreSQL (WHERE column_name = column_value)
- mysql - How to apply intersection grouped with index column in MYSQL
- mysql - How restrict mysql tiny-int to accept just integer
- reactjs - 让变量在 useImperativeHandle 函数中未定义
- cookies - Set “samesite=none” in aiohttp EncryptedCookieStorage
- android - 使用 exoplayer 播放 getExternalFilesDir mp3