worker-threads-promise
v1.0.1
Published
Worker threads with promise support
Downloads
12
Readme
Worker Threads Promise
Worker Threads implementation with promises to support request-response communication between master and child thread.
If 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.
Install
npm i worker-threads-promise
Usage
./main.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
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
Timeout
It will throw timeout exceed error after given amount of milliseconds.
Default: No Timeout
./main.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
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);
});
});
Unref
It will prevent event loop to remain active when waiting for response.
Default: false
./main.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
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);
});
});
transferList
You can also use transfer list for async calls, you may use 3rd parameter for them.
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
.