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