Comments (1)
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)
- Bug: Node `vm` doesn't have Node's `global` global HOT 6
- Bug: `worker_threads` missing `MessagePort` conversion in deeply nested object
- Analyze CJS re-exports in parallel
- Cache module emits in parallel
- fix: npm package "urllib": invalid type: map, expected a string HOT 6
- Bug: `jest` errors with Class constructor Process cannot be invoked without 'new'
- Panic with npm:@aws-sdk/client-s3 HOT 1
- LSP: auto import to `.js` file even though the actual file is a `.d.ts` file
- LSP: auto import doesn't work correctly with project-root-for-absolute-imports mapping HOT 1
- :bug:(WinOS) `Deno.consoleSize()` incorrectly returns console buffer size
- BUG: `deno doc --lint` crash with non-ASCII ts code
- @deno-types breaks at 1.43.4 HOT 17
- `/// <reference types="..." />` stopped working in TypeScript files in the LSP in 1.43.0
- API to decode URI path segments
- "Uncaught SyntaxError: Unexpected token '<'" when using primitive as parameter in arrow function declaration HOT 1
- Supporting `vitest` tracking issue
- Bug: Panic when running astro's `test:node` task
- Deno v1.43.4 on Windows: WinGet installation or upgrade fails HOT 11
- reduce readFileSync syscall count HOT 2
- Diagnostic-languageserver stopped working in Deno >= 1.43 HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from deno.