import { nanoid } from 'nanoid'; type CreatePromiseResolver = () => Readonly<[ promise: Promise, resolver: (value?: any) => void, rejector: (reason?: any) => void, id: string ]> /** * Simplifies the creation of a promise together with a reference to the resolver and rejector. * @example * ```ts * const [ promise, resolver, rejector, id ] = createPromiseResolver(); * ``` */ export const createPromiseResolver: CreatePromiseResolver = () => { let id = nanoid(5); let resolver: (value?: any) => void = () => {}; let rejector: () => void = () => {}; const promise = new Promise((resolve, reject) => { resolver = resolve; rejector = reject; }); return [ promise, resolver, rejector, id ]; };