使用 node.js 中的设置间隔在 long 运行 异步函数期间报告(后端服务)

Reporting during long running async function using set interval in node.js (backend service)

我需要在 node.js 中报告一个长 运行 操作的状态。下面的代码概述了基本用例。等待我知道的 longProcess 方法将与调用者同步,但我必须在我的代码中等待该方法。我应该在 longProcess 方法中处理这个吗?不确定如何解决这个问题。

function sleep (ms: number) {
  new Promise(resolve => setTimeout(resolve, ms));
}

let processedCount = 0;

async function longProcess() {
  // really long operation
  while (true) {
    processedCount++;
    await sleep(1000); // simulate long process
    if (processedCount === 10) // just to end the test somehow
      break;
  }
}

async function report() {
  console.log(processedCount);
}

async function main() {
  const id = setInterval(report, 500);
  await longProcess();
  clearInterval(id);
}

main().then(() => console.log("Done"));

sleep 方法仅用于演示目的,模拟长时间的 运行 操作。 'longProcess' 执行复杂且耗时的处理。它调用传入的回调以向调用方报告已处理的计数。 class 包含调用方法(和回调),还有一个我想定期调用的报告方法。我需要能够为此创建一个单元测试

你的睡眠函数没有返回你创建的承诺。您在函数返回的值上调用 await,在本例中它是未定义的,因此它实际上根本不等待。

function sleep (ms: number) {
  return new Promise(resolve => setTimeout(resolve, ms));
}