Skip to content

Commit

Permalink
feat(promise): new createControlledPromise method
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Apr 10, 2022
1 parent 258833b commit 8a07c61
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/promise.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,36 @@ export function createPromiseLock() {
},
}
}

/**
* Promise with `resolve` and `reject` methods of itself
*/
export interface ControlledPromise<T = void> extends Promise<T> {
resolve(value: T | PromiseLike<T>): void
reject(reason?: any): void
}

/**
* Return a Promise with `resolve` and `reject` methods
*
* @category Promise
* @example
* ```
* const promise = createControlledPromise()
*
* await promise
*
* // in anther context:
* promise.resolve(data)
* ```
*/
export function createControlledPromise<T>(): ControlledPromise<T> {
let resolve: any, reject: any
const promise = new Promise<T>((_resolve, _reject) => {
resolve = _resolve
reject = _reject
}) as ControlledPromise<T>
promise.resolve = resolve
promise.reject = reject
return promise
}

0 comments on commit 8a07c61

Please sign in to comment.