TypeScript

Deferred / Externally-Resolvable Promise

admin by @admin ADMIN
Jun 14, 2026
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Create a Promise whose `resolve` and `reject` are exposed externally. Useful when you need to settle a promise from outside its executor — e.g. waiting on an event-driven response.
TypeScript
Raw
type Deferred<T> = {
  promise: Promise<T>;
  resolve: (value: T | PromiseLike<T>) => void;
  reject:  (reason?: unknown) => void;
};

export function deferred<T>(): Deferred<T> {
  let resolve!: Deferred<T>['resolve'];
  let reject!:  Deferred<T>['reject'];
  const promise = new Promise<T>((res, rej) => { resolve = res; reject = rej; });
  return { promise, resolve, reject };
}

// Wait for a one-shot event
const d = deferred<MessageEvent>();
worker.addEventListener('message', d.resolve, { once: true });
const msg = await d.promise;
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.