首页 > 解决方案 > 如何并行运行 2 个等待循环?

问题描述

我有这个代码:

for await (const thing of signal()) {
    // logic
}

for await (const thing of anotherSignal()) {
    // logic
}

问题是这些for awaits 永远运行。所以第二个永远不会执行。有没有办法让这两个循环并行运行?

标签: javascriptasync-await

解决方案


不要等待第一个任务完成,并行运行它们,就像这样:

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())


推荐阅读