我有一个使用工作线程的节点脚本。我想用 Jest 来测试一下。该文件被调用,但代码从未执行。
这是调用worker的函数:
// index.ts
function foo(){
const worker = new Worker(path.resolve(__dirname, "./worker.ts"));
worker.on("message", (e) => {
// do stuff
});
}
这是工人:
// worker.ts
const { parentPort } = require("worker_threads");
const { doStuff } = require("./index");
parentPort?.on("message", async (e) => {
const data = await doStuff(e);
parentPort?.postMessage({ data });
}
);
我做错了什么?我试图用 Jest 来嘲笑 Worker,但它没有被调用。在使用它之前,我还尝试将
worker.ts
编译为 worker.js
文件。
问题是你的代码陷入僵局哈哈。您的主线程(
index.ts
)正在等待来自子线程的消息,而您的子线程(worker.ts
)也在执行主线程中的逻辑之前等待来自主线程的消息。您需要从主线程触发此执行。
为此,请将其添加到您的
index.ts
代码
worker.postMessage("some data");
这将广播一条新消息,该消息将由您的子线程接收,从而执行
doStuff
并将消息发送回您的主线程