type Status = "pending" | "success" | "error" export type PromiseWrapper = { promise: Promise read(): T } export function wrapPromise(promise: Promise): PromiseWrapper { let status: Status = "pending" let result: T let error: Error const suspender = promise.then( data => { status = "success" result = data }, err => { status = "error" error = err } ) return { promise, read(): T { switch (status) { case "pending": throw suspender case "error": throw error case "success": return result } }, } }