繁体   English   中英

顺序 for 循环 - Await Promise all

[英]Sequential for loop - Await Promise all

我只是试图让代码的最后一行仅在所有 updateInkLevel 函数完成执行后运行。

  let accessToken
  for (let i = 0; i < activeDevices.length; i++) {
    if (i % 100 === 0) {
      accessToken = await wppServices.getAccessToken()
    }

    updateInkLevel(accessToken, deviceId, logIndex) // if no await here, all parts will run in parallel
    await new Promise((r) => setTimeout(r, 500)) // add a small sleep delay
  }
  logger.info(`${head}] END. COMPLETED ${activeDevices.length} printers.`)

updateInkLevel 是一个异步函数,返回一个承诺。 我正在考虑使用 Promise.all,但这会并行运行每个迭代,这不是我想要的。 在这里,我一次一次地按顺序触发每个迭代,睡眠延迟间隔很小。

参考资料, Node.js 原生 Promise.all 是并行处理还是顺序处理?

await new Promise((r) => setTimeout(r, 500)) // add a small sleep delay

不要那样做。

您在猜测updateInkLevel需要多长时间


只需await updateInkLevel返回的承诺。

这将暂停循环,直到承诺解决。


我正在考虑使用 Promise.all,但这会并行运行每个迭代,这不是我想要的。

您确定不希望它们并行吗? 这通常会更有效率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM