UNPKG

@xylabs/threads

Version:

Web workers & worker threads as simple as a function call

27 lines (24 loc) 686 B
// eslint-disable-next-line unicorn/no-useless-undefined const doNothing = () => undefined /** * Creates a new promise and exposes its resolver function. * Use with care! */ export function createPromiseWithResolver<T>(): [Promise<T>, (result: T) => void] { let alreadyResolved = false let resolvedTo: T let resolver: (value: T | PromiseLike<T>) => void = doNothing const promise = new Promise<T>((resolve) => { if (alreadyResolved) { resolve(resolvedTo) } else { resolver = resolve } }) const exposedResolver = (value: T) => { alreadyResolved = true resolvedTo = value resolver(resolvedTo) } return [promise, exposedResolver] }