Git Product home page Git Product logo

Comments (1)

bartlomieju avatar bartlomieju commented on May 24, 2024

Minimal reproduction:

// worker.mjs
import {
  isMainThread,
  MessageChannel,
  parentPort,
  receiveMessageOnPort,
  Worker,
  workerData,
} from "node:worker_threads";

if (isMainThread) {
  const { port1: mainPort, port2: workerPort } = new MessageChannel();

  // This re-loads the current file inside a Worker instance.
  const w = new Worker(import.meta.filename, {
    workerData: { workerPort },
    transferList: [workerPort],
  });

  w.on("message", (data) => {
    console.log("message from worker", data);

    const msg = receiveMessageOnPort(mainPort).message;
    console.log("message on mainPort", msg);
    w.terminate();
  });

  w.postMessage("Hello from parent");
} else {
  console.log("Inside Worker!");
  parentPort.on("message", (msg) => {
    console.log("message from main", msg);
    parentPort.postMessage("Hello from worker on parentPort!");
    workerData.workerPort.postMessage("Hello from worker on workerPort!");
  });
}
$ node worker.mjs
Inside Worker!
message from worker Hello from worker on parentPort!
message on mainPort Hello from worker on workerPort!
message from main Hello from parent

$ deno run -A worker.mjs
Inside Worker!
# exits
# There's actually a BadResource error raised, but it's swallowed an never surfaced

# With some debug logs
$ ./target/debug/deno run -A worker.mjs
Inside Worker!
parentPort listener called message
before MessagePort.postMessage Error
    at MessagePort.postMessage (ext:deno_web/13_message_port.js:117:52)
    at file:///Users/ib/dev/deno/worker.mjs:32:27
    at _listener (node:worker_threads:456:9)
    at innerInvokeEventListeners (ext:deno_web/02_event.js:754:7)
    at invokeEventListeners (ext:deno_web/02_event.js:801:5)
    at dispatch (ext:deno_web/02_event.js:658:9)
    at dispatchEvent (ext:deno_web/02_event.js:1043:12)
    at pollForMessages (ext:runtime_main/js/99_main.js:313:7)
    at eventLoopTick (ext:core/01_core.js:169:7)
before MessagePort.postMessage op 4
before get in op_message_port_message
after get  in op_message_port_message CustomError {
    class: "BadResource",
    message: "Bad resource ID",
}
after worker thread loop
error: Uncaught (in worker "") BadResource: Bad resource ID
    workerData.workerPort.postMessage("Hello from worker on workerPort!");
                          ^
    at MessagePort.postMessage (ext:deno_web/13_message_port.js:148:5)
    at file:///Users/ib/dev/deno/worker.mjs:32:27
    at _listener (node:worker_threads:456:9)
    at innerInvokeEventListeners (ext:deno_web/02_event.js:754:7)
    at invokeEventListeners (ext:deno_web/02_event.js:801:5)
    at dispatch (ext:deno_web/02_event.js:658:9)
    at dispatchEvent (ext:deno_web/02_event.js:1043:12)
    at pollForMessages (ext:runtime_main/js/99_main.js:313:7)
    at eventLoopTick (ext:core/01_core.js:169:7)
error: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'message')
    const msg = receiveMessageOnPort(mainPort).message;
                                              ^
    at NodeWorker.<anonymous> (file:///Users/ib/dev/deno/worker.mjs:22:47)
    at NodeWorker.emit (ext:deno_node/_events.mjs:383:28)
    at NodeWorker.#pollMessages (node:worker_threads:310:12)
    at eventLoopTick (ext:core/01_core.js:169:7)

from deno.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.