Worker threads with promise support
npm install worker-threads-promiseIf you are using Node version 12- be sure to use the argument --experimental-workers.
Promise implementation adds very low latency that can be considered as unimportant.
bash
npm i worker-threads-promise
`Usage
./main.js
`js
const Worker = require('worker-threads-promise');
const path = require('path');const worker = new Worker(path.join(__dirname, './worker.js'));
(async () => {
const res = await worker.postMessageAsync(1000);
console.log(res);
})();
`./worker.js
`js
const {parentPort} = require('worker_threads');
const Worker = require('worker-threads-promise');
Worker.connect(parentPort);parentPort.on('message', data => { //you can use await too
return new Promise(resolve => {
setTimeout(() => {
resolve(data);
}, data);
});
});
`
Options
$3
It will throw timeout exceed error after given amount of milliseconds. Default: No Timeout
./main.js
`js
const Worker = require('worker-threads-promise');
const path = require('path');const worker = new Worker(path.join(__dirname, './worker.js'));
(async () => {
const res = await worker.postMessageAsync(5000, {
timeout: 1000
}).catch(e => {
console.log(e);
});
})();
`./worker.js
`js
const {parentPort} = require('worker_threads');
const Worker = require('worker-threads-promise');
Worker.connect(parentPort);parentPort.on('message', data => {
return new Promise(resolve => {
setTimeout(() => {
resolve(data);
}, data);
});
});
`$3
It will prevent event loop to remain active when waiting for response.Default:
false./main.js
`js
const Worker = require('worker-threads-promise');
const path = require('path');const worker = new Worker(path.join(__dirname, './worker.js'));
(async () => {
const res = await worker.postMessageAsync(5000, {
timeout: 1000,
unref: true
}).catch(e => {
console.log(e);
});
})();
`./worker.js
`js
const {parentPort} = require('worker_threads');
const Worker = require('worker-threads-promise');
Worker.connect(parentPort);parentPort.on('message', data => {
return new Promise(resolve => {
setTimeout(() => {
resolve(data);
}, data);
});
});
`$3
You can also use transfer list for async calls, you may use 3rd parameter for them.`js
await worker.postMessageAsync(5000, null, []);
`As
worker-threads-promise extends native Worker, you can use all other features of Worker classes using instance of worker-threads-promise`.