为什么nodejs在执行完所有代码之前就退出了?

问题描述 投票:0回答:0

随机执行下面的代码要么打印“DONE”,要么不打印,为什么会这样? 我怎么让它每次都去

console.log("DONE");
线。

const {Worker, isMainThread, parentPort} = require('node:worker_threads');

async function main() {
  if (isMainThread) {
    const worker = new Worker(__filename);
    let resultResolve = null;
    let resultPromise = new Promise(resolve => resultResolve = resolve);
    worker.on('message', (msg) => resultResolve(msg));
    let result = null;
    while ((result = await resultPromise) != null) {
      resultPromise = new Promise(resolve => resultResolve = resolve);
    }
    console.log("DONE");
  } else {
    for (let i = 0; i < 10000; i++) {
      parentPort.postMessage(i);
    }
    parentPort.postMessage(null);
  }
}

main();

我的猜测是,当 worker 退出并且主线程事件循环是否到达之前的

await resultPromise
行时,就会发生竞争。

javascript node.js promise v8 event-loop
© www.soinside.com 2019 - 2024. All rights reserved.