DenoDDeno
Powered by
cotyC
Denoβ€’2y agoβ€’
3 replies
coty

How to detect if executing on main thread vs worker

function main() {
  // create worker from this same file
  const worker = new Worker(import.meta.resolve("./mod.ts"), {
      name: "hello-worker",
      type: "module",
  });
  worker.onmessage = (e: MessageEvent<{ message: string }>) => {
      console.log(e.data.message);
  };
  worker.postMessage({
      message: "hello",
  });
}

if (import.meta.main) {
    if (self.window) {
        main();
    } else {
        const worker = self as unknown as Worker & { name?: string };
        worker.onmessage = (e: MessageEvent<{ message: string }>) => {
            worker.postMessage({
                message: `${e.data.message} from ${worker.name}`,
            });
            self.close();
        };
    }
}
function main() {
  // create worker from this same file
  const worker = new Worker(import.meta.resolve("./mod.ts"), {
      name: "hello-worker",
      type: "module",
  });
  worker.onmessage = (e: MessageEvent<{ message: string }>) => {
      console.log(e.data.message);
  };
  worker.postMessage({
      message: "hello",
  });
}

if (import.meta.main) {
    if (self.window) {
        main();
    } else {
        const worker = self as unknown as Worker & { name?: string };
        worker.onmessage = (e: MessageEvent<{ message: string }>) => {
            worker.postMessage({
                message: `${e.data.message} from ${worker.name}`,
            });
            self.close();
        };
    }
}

I put everything in one file to make it easier to show, but is checking for
self.window
self.window
the preferred way? or is there some value in Deno context?

Bonus question, how can you properly type
self
self
when in a worker? That type casting is neither pretty nor accurate
Deno banner
DenoJoin
Chat about Deno, a modern runtime for JavaScript and TypeScript.
20,934Members
Resources
Recent Announcements

Similar Threads

Was this page helpful?

Similar Threads

How to debug multiple worker modules in vs code
rt0099Rrt0099 / help
13mo ago
How to recover from worker death? It terminates my main program…
jcayzacJjcayzac / help
3y ago
How to make workers unable to crash the main program
Andreu BotellaAAndreu Botella / help
3y ago