@datocms/rest-client-utils
Version:
Utilities for DatoCMS REST API clients
31 lines • 898 B
JavaScript
export class CanceledPromiseError extends Error {
constructor() {
super('Promise canceled!');
Object.setPrototypeOf(this, new.target.prototype);
}
}
export function makeCancelablePromise(promiseOrAsyncFn, onCancel) {
let cancel = null;
const cancelable = new Promise((resolve, reject) => {
cancel = () => {
try {
if (onCancel) {
onCancel();
}
reject(new CanceledPromiseError());
}
catch (e) {
reject(e);
}
};
const promise = typeof promiseOrAsyncFn === 'function'
? promiseOrAsyncFn()
: promiseOrAsyncFn;
promise.then(resolve, reject);
});
if (cancel) {
cancelable.cancel = cancel;
}
return cancelable;
}
//# sourceMappingURL=makeCancelablePromise.js.map