Skip to content

Instantly share code, notes, and snippets.

@fostyfost
Created May 5, 2023 15:29
Show Gist options
  • Save fostyfost/199da069d1d5095eb678b272a0812760 to your computer and use it in GitHub Desktop.
Save fostyfost/199da069d1d5095eb678b272a0812760 to your computer and use it in GitHub Desktop.
Promise delegate helper
export type PromiseDelegateResolveCallback<ResolveType> = (value: ResolveType | PromiseLike<ResolveType>) => void
export type PromiseDelegateRejectCallback<RejectType> = (reason?: RejectType) => void
export type PromiseDelegateResult<ResolveType, RejectType> = {
promise: Promise<ResolveType>
resolve: PromiseDelegateResolveCallback<ResolveType>
reject: PromiseDelegateRejectCallback<RejectType>
}
export const promiseDelegate = <ResolveType = void, RejectType = unknown>(): PromiseDelegateResult<
ResolveType,
RejectType
> => {
let resolveCallback: PromiseDelegateResolveCallback<ResolveType>
let rejectCallback: PromiseDelegateRejectCallback<RejectType>
const promise = new Promise<ResolveType>((resolve, reject) => {
resolveCallback = resolve
rejectCallback = reject
})
return {
promise,
resolve: value => resolveCallback(value),
reject: reason => rejectCallback(reason),
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment