Level Up Coding

Coding tutorials and news. The developer homepage gitconnected.com && skilled.dev && levelup.dev

Follow publication

Simple bidirectional messaging in Node.js Worker Threads

Jeff Lowery
Level Up Coding
Published in
4 min readMar 17, 2019

What are Worker Threads?

Why would you use them?

Creating a worker thread

const {
Worker, isMainThread, parentPort, workerData
} = require('worker_threads');
if (isMainThread) {
module.exports = function parseJSAsync(script) {
return new Promise((resolve, reject) => {
const worker = new Worker(__filename, {
workerData: script
});
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
});
});
};
} else {
const { parse } = require('some-js-parsing-library');
const script = workerData;
parentPort.postMessage(parse(script));
}

Talking to a worker thread

{ incoming: { going: 'once' } }
{ incoming: { going: 'twice' } }
{ incoming: { going: 'three times' } }

Exiting the thread

Done!

No responses yet

Write a response