https://github.com/acanguven/worker-threads-promise
⚙️ Worker Threads implementation with promises to support request-response communication
https://github.com/acanguven/worker-threads-promise
Last synced: 3 months ago
JSON representation
⚙️ Worker Threads implementation with promises to support request-response communication
- Host: GitHub
- URL: https://github.com/acanguven/worker-threads-promise
- Owner: Acanguven
- License: mit
- Created: 2019-10-08T11:26:56.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-10-08T11:38:57.000Z (over 5 years ago)
- Last Synced: 2025-03-05T17:27:43.899Z (3 months ago)
- Language: TypeScript
- Size: 49.8 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
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
```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
### Timeout
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);
});
});
```### Unref
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);
});
});
```### transferList
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`.