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 |