- Version: v10.9.0
- Platform: Darwin 17.7.0 Darwin Kernel Version 17.7.0
- Subsystem:
The problem is related to Node.js worker threads: https://nodejs.org/api/worker_threads.html
The worker thread is spawned as illustrated in the following example:
// main.jsconst{Worker}=require('worker_threads')try{newWorker('./worker.js',{workerData: {fn: ()=>{}}})}catch(err){console.log(err)}And then this is the actual worker:
// worker.jsconst{parentPort, workerData}=require('worker_threads')console.log(workerData)parentPort.postMessage('ok')Now, worker threads do not support elements such as functions and classes in worker data and an exception is thrown when main.js is launched:
$ node --experimental-worker main.js
The output is this:
$ node --experimental-worker main.js DataCloneError: () => {} could not be cloned.
at new Worker (internal/worker.js:269:17)
at Object.<anonymous> (/Users/wilk/Projects/mine/task/main.js:22:3)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:266:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)Unfortunately, the process keeps alive instead of dying.
However, if I prepend the v8 serialization before the worker instantiation, then it terminates as expected:
// main.jsconst{Worker}=require('worker_threads')constv8=require('v8')try{v8.serialize({fn: ()=>{}})newWorker('./worker.js',{workerData: {fn: ()=>{}}})}catch(err){console.log(err)}I think the issue is with v8 serialization's error handling inside the Worker's constructor.
The problem is related to Node.js worker threads: https://nodejs.org/api/worker_threads.html
The worker thread is spawned as illustrated in the following example:
And then this is the actual worker:
Now, worker threads do not support elements such as functions and classes in worker data and an exception is thrown when main.js is launched:
The output is this:
Unfortunately, the process keeps alive instead of dying.
However, if I prepend the v8 serialization before the worker instantiation, then it terminates as expected:
I think the issue is with v8 serialization's error handling inside the Worker's constructor.