node.js 'worker_threads' に苦労しています。
そこで、私がやりたかったことは、カスタム クラスのいくつかのインスタンスをワーカー スレッドに渡すことです。インスタンスは、一意のシリアル番号によってマップに割り当てられます。つまり、基本的に、タイプ <string, MyUniqueClassInstance> のマップを取得しました。
私のワーカーの実装は次のようになります。
ワーカー サービスを実行するクラス メソッド:
public static runService = (workerData:any) => {
return new Promise((resolve, reject) => {
const route = path.join(__dirname, '/worker.js');
const worker = new Worker(route, { workerData });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code:number) => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
})
})
}
ワーカー自体:
const { workerData, parentPort } = require('worker_threads')
const instance = new Counter();
const {items, myMap} = workerData;
const pResponseList:Promise<any>[] = [];
items.map((item: Item) => {
pResponseList.push(
instance.count(item, myMap.get(item._id)!)
);
});
Promise.all(pResponseList).then(res => parentPort.postMessage(res));
そして、「カウント」メソッド内でアイテムインスタンスからメソッドを実行しようとすると、エラーがスローされます
myMapEntry.myCustomInstanceMethod is not a function
インスタンスのコンテンツを .count() メソッドに渡す直前に console.log() しようとしましたが、すべてが正しく解決されました。
同じパターンがワーカー インスタンスの外でも問題なく実行されます。
このコード内で潜在的に間違っている可能性があるものを正確に見つけるのを手伝ってくれる人はいますか?