我有一个
main.js
和一个 worker.js
文件,两者都在下面,由于某种原因,工作线程 1 不断抛出找不到窗口错误。对于背景,这是在带有 VS Code 的 NodeJS (v19.7.0) 中。直接用node main.js
运行也会出现同样的错误
main.js
import { Worker, isMainThread } from "node:worker_threads";
function runService(workerData) {
console.log(process.cwd());
const worker = new Worker('./worker.js', { workerData });
worker.on("message", incoming => console.log({ incoming }));
worker.on("error", code => new Error(`Worker error with exit code ${code}`));
worker.on("exit", code =>
console.log(`Worker stopped with exit code ${code}`)
);
worker.postMessage("once");
worker.postMessage("twice");
worker.postMessage("three times");
worker.postMessage("exit");
setTimeout(() => worker.postMessage("you won't see me"), 100);
}
async function run() {
const result = runService("let's begin");
console.log({ isMainThread });
}
run().catch(err => console.error(err));
worker.js
import { isMainThread, parentPort } from "node:worker_threads";
parentPort.on("message", message => {
if (message === "exit") {
parentPort.postMessage("sold!");
parentPort.close();
} else {
parentPort.postMessage({ going: message });
}
});
parentPort.postMessage({ start: workerData, isMainThread });
为什么调试器/节点运行时检查窗口是否存在,我如何让这个非常简单的工作程序执行?
Exception has occurred: ReferenceError: window is not defined
at eval (eval at checkNotElectron (c:\Users\<username>\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\ms-vscode.js-debug\src\bootloader.bundle.js:2:95083), <anonymous>:1:1)
at checkNotElectron (bootloader.bundle.cdp:2:95083)
at bootloader.bundle.cdp:2:96247
at Array.some (<anonymous>)
at checkAll (bootloader.bundle.cdp:2:96237)
at bootloader.bundle.cdp:2:90808
at 6679 (bootloader.bundle.cdp:2:93349)
at __webpack_require__ (bootloader.bundle.cdp:2:99703)
at bootloader.bundle.cdp:2:99856
at Object.<anonymous> (bootloader.bundle.cdp:2:99883)
直接使用
node main.js
在 visual studio 代码之外运行时,我得到以下输出,这表明 worker_thread 中存在错误
C:\src\worker
{ isMainThread: true }
Worker stopped with exit code 1
我尝试了很多东西,将其切换为 CommonJS 导入和要求,指定
node:worker_threads
而不是 worker_threads
此外有时我会在使用调试器在未捕获的异常上设置断点时遇到其他错误,例如'找不到模块'utf-8-validate'。'所有这些错误都发生在worker_thread上。这些其他错误并不总是发生,它很少见并且发生时没有代码更改。