5

Here's my worker:

const Worker = require('worker_threads');
const worker = new Worker("function hello () { console.log('hello world');}", { eval: true })
worker.hello() // not correct

I would like to call hello()

How do I do this?

1
  • If you look at the docs, you'll see that's not how they require Worker Commented Apr 2, 2020 at 18:22

2 Answers 2

5

Threads communicate through passing messages back and forth, for instance:

worker.postMessage("say hello");

Your worker would set up a listener for the message event, and receive the message as the value property of that eevnt:

// In the worker
const { isMainThread, parentPort } = require('worker_threads');
if (!isMainThread) {
    parentPort.on("message", e => {
        // Dispatch here. For instance:
        if (e.value === "say hello") {
            hello();
        }
    };
}
function hello() { /*...*/ }

There's a lot more to messaging back and forth, details in the worker documentation.

Sign up to request clarification or add additional context in comments.

Comments

0

you can use worker-messenger on npm to write that style:

import { Worker } from 'worker_threads'
import { ParentMessenger } from 'worker-messenger'
const test = async () => {
    const results = await messenger.callWorker('testFunction_2', 'args', timeout)
    console.log({results});
}
test()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.