27 lines
628 B
JavaScript
27 lines
628 B
JavaScript
|
//@ts-check
|
||
|
/// <reference path="./deferredPromise.d.ts"/>
|
||
|
|
||
|
/**
|
||
|
* Returns a promise that can be resolved externally.
|
||
|
* @template {any} DeferredPromiseType
|
||
|
* @returns {DeferredPromise<DeferredPromiseType>}
|
||
|
*/
|
||
|
export const deferredPromise = () => {
|
||
|
/** @type {(value: DeferredPromiseType) => void} */
|
||
|
let resolve
|
||
|
/** @type {(reason?: any) => void} */
|
||
|
let reject;
|
||
|
|
||
|
/**
|
||
|
* @type {Promise<DeferredPromiseType>}
|
||
|
*/
|
||
|
const promise = new Promise((_resolve, _reject) => {
|
||
|
resolve = _resolve;
|
||
|
reject = _reject;
|
||
|
});
|
||
|
|
||
|
// @ts-ignore
|
||
|
return Object.assign(promise, {resolve, reject});
|
||
|
}
|
||
|
|
||
|
export default DeferredPromise
|