1.0.1 • Published 5 years ago

worker-threads-promise v1.0.1

Weekly downloads
1
License
MIT
Repository
github
Last release
5 years ago

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.

1.0.1

5 years ago

1.0.0

5 years ago