我一直在阅读有关如何不阻止 Node 的事件循环的信息。避免阻塞的一种方法是使用分区。
我试图在我的代码中使用分区循环,但我似乎无法等待我的循环。这是我的代码的简化版本:
const report = {
someValue: 0
};
const runLoop = async () => {
report.someValue += 1;
// all sorts of async operations here that use async-await
if (report.someValue < 1000) {
await setImmediate(runLoop);
}
};
await runLoop();
console.log('Report is', report);
这将返回“Report is { someValue: 1 }”,但我希望 someValue 为 1000。
我猜 setImmediate 不会返回承诺,所以我尝试过承诺:
const setImmediatePromise = util.promisify(setImmediate);
const report = {
someValue: 0
};
const runLoop = async () => {
report.someValue += 1;
// all sorts of async operations here that use async-await
if (report.someValue < 1000) {
await setImmediatePromise(runLoop);
}
};
await runLoop();
console.log('Report is', report);
但这也会返回“Report is { someValue: 1 }”。
那么,我怎样才能等待这个递归 setImmediate “循环”,以便我仅在整个递归周期完成后才进行 console.log 报告?