为了上下文化,我想通过 NodeJS“worker_thread”模块中的工作线程来使用类实例函数。
在一个main.js
文件中,我声明一个类并实例化一个新的 Worker,通过选项传递新实例workerData
。
main.js
const { Worker } = require('worker_threads');
class obj {
constructor() {
this.a = "12";
this.b = 42;
}
c() {
return 'hello world';
}
}
let newobj = new obj();
console.log({
a: newobj.a,
b: newobj.b,
c: newobj.c()
});
//Output: { a: '12', b: 42, c: 'hello world' }
let worker = new Worker('./process.js', { workerData: { obj: newobj } });
worker.once('message', res => { console.log({ res }) });
如您所见,工作人员调用了process.js
脚本。让我们看看。
进程.js
const { parentPort, workerData } = require('worker_threads');
let { obj } = workerData;
console.log({
a: obj.a,
b: obj.b,
c: obj.c()
});
parentPort.postMessage('DONE');
如您所知,此代码会引发错误:TypeError: obj.c is not a function
. 事实上,在检查了 Worker Thread 文档(https://nodejs.org/dist./v10.22.0/docs/api/worker_threads.html#worker_threads_new_worker_filename_options)后,我发现 Worker 不可能是一个具有函数的对象。实际上,它可以工作,但所有功能都没有被克隆。
我真的很困惑,因为我不知道如何解决这个问题。事实上,这个例子很容易,因为简化了一个复杂的情况,但在我的情况下,我绝对需要在process.js
side 中调用 c 函数,但我不知道如何以不同的方式进行操作。
我希望你能帮助我。在此先感谢您的时间。