// Created on savesnippets.com ยท https://savesnippets.com/X3fuafvhoukW9d type Deferred = { promise: Promise; resolve: (value: T | PromiseLike) => void; reject: (reason?: unknown) => void; }; export function deferred(): Deferred { let resolve!: Deferred['resolve']; let reject!: Deferred['reject']; const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); return { promise, resolve, reject }; } // Wait for a one-shot event const d = deferred(); worker.addEventListener('message', d.resolve, { once: true }); const msg = await d.promise;