diff options
author | Satya Rohith <me@satyarohith.com> | 2024-04-02 17:06:09 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-02 17:06:09 +0530 |
commit | 4d66ec91c1ca23134dc25f58f41da52a99615a38 (patch) | |
tree | 96b9de0cf5ac664f14ac8fc35f93d2d3da65a87f /tests/testdata/workers/node_worker_message_port.mjs | |
parent | 7ad76fd453972e9262985c61840c77b8b8a6dbb7 (diff) |
fix(ext/node): MessagePort works (#22999)
Closes https://github.com/denoland/deno/issues/22951
Closes https://github.com/denoland/deno/issues/23001
Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com>
Diffstat (limited to 'tests/testdata/workers/node_worker_message_port.mjs')
-rw-r--r-- | tests/testdata/workers/node_worker_message_port.mjs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/testdata/workers/node_worker_message_port.mjs b/tests/testdata/workers/node_worker_message_port.mjs new file mode 100644 index 000000000..71640fb40 --- /dev/null +++ b/tests/testdata/workers/node_worker_message_port.mjs @@ -0,0 +1,41 @@ +import workerThreads from "node:worker_threads"; + +const { port1: mainPort, port2: workerPort } = new workerThreads + .MessageChannel(); + +// Note: not using Promise.withResolver() because it's not available in Node.js +const deferred = createDeferred(); + +const worker = new workerThreads.Worker( + import.meta.resolve("./node_worker_message_port_1.cjs"), + { + workerData: { workerPort }, + transferList: [workerPort], + }, +); + +worker.on("message", (data) => { + console.log("worker:", data); + mainPort.on("message", (msg) => { + console.log("mainPort:", msg); + deferred.resolve(); + }); + mainPort.on("close", (_msg) => { + console.log("mainPort closed"); + }); +}); + +worker.postMessage("Hello from parent"); +await deferred.promise; +await worker.terminate(); +mainPort.close(); + +function createDeferred() { + let resolveCallback; + let rejectCallback; + const promise = new Promise((resolve, reject) => { + resolveCallback = resolve; + rejectCallback = reject; + }); + return { promise, resolve: resolveCallback, reject: rejectCallback }; +} |