tickle/modules/utils/deferredPromise.mjs

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