我只是想让代码的最后一行仅在所有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。我当时在考虑使用Promise.all,但是那样会并行运行每个迭代,这不是我想要的。在这里,我每次都以较小的睡眠延迟间隔依次触发一次迭代。
参考, Is Node.js native Promise.all processing in parallel or sequentially?
答案 0 :(得分:0)
await new Promise((r) => setTimeout(r, 500)) // add a small sleep delay
不要那样做。
您正在猜测 updateInkLevel
需要花费多长时间
await
返回的承诺updateInkLevel
。
这将暂停循环,直到承诺解决为止。
我当时在考虑使用Promise.all,但是那样可以并行运行每个迭代,这不是我想要的。
您确定不希望它们并行吗?这样通常会更有效率。