workerama
Version:
Run sync/async function across Worker Threads
38 lines (33 loc) • 652 B
JavaScript
const {
workerData,
parentPort
} = require('worker_threads');
const {
fnFilePath,
fnName,
fnArgs
} = workerData;
const fnPromise = require(fnFilePath)[fnName](...fnArgs);
parentPort.on('message', async item => {
try {
const fn = await fnPromise;
if (item.done) {
await fn(item);
process.exit();
}
const {
value,
transferList
} = await fn(item);
parentPort.postMessage({
type: 'done',
value
}, transferList);
} catch (error) {
const value = error instanceof Error ? error.message : error;
parentPort.postMessage({
type: 'error',
value
});
}
});