javascript - 如何并行运行 2 个等待循环?
问题描述
我有这个代码:
for await (const thing of signal()) {
// logic
}
for await (const thing of anotherSignal()) {
// logic
}
问题是这些for await
s 永远运行。所以第二个永远不会执行。有没有办法让这两个循环并行运行?
解决方案
不要等待第一个任务完成,并行运行它们,就像这样:
let delay = ms => new Promise(ok => setTimeout(ok, ms));
async function* infinit_iter() {
for (let i = 0;; i++) {
await delay(3000)
yield i
}
}
async function run(name, iter) {
for await (let i of iter)
console.log(name, i)
}
run("signal:", infinit_iter())
run("anotherSignal:", infinit_iter())
推荐阅读
- c++ - 运行时错误:将无符号偏移量添加到 0x6.. 溢出到 0x6.. (stl_vector.h)。我知道为什么我会得到这个,但需要一点建议
- apache-kafka-connect - 健康/活力的 srimzi 健康检查 404
- mysql - MySQL SELECT 与相同查询的差异 - 诊断问题的最佳方法
- c - 在 cs50 ide 中等待程序退出时超时
- c++ - c++中std::map的空间复杂度是多少?
- python - nginx 允许 https 内部服务器但不允许外部
- swift - 从不同的文件 SwiftUI 调用核心数据对象
- android - Leak Canary 使用 ViewPager2 检测 TabLayout 的内存泄漏
- sql - 在 Postgres 中合并 - 在冲突中使用插入
- c# - 是否可以在 Unity 中获取精灵表动画的当前帧?