CancellablePromise
by AntowaKartowa
JavaScript
class CancellablePromise extends Promise {
constructor(executor, signal) {
let cancelMethod;
signal = signal || new Promise((res, cancel) => {
cancelMethod = () => cancel(new Error('Promise was cancelled'));
});
super(function (resolve, reject) {
signal.catch(error => reject(error));
executor(resolve, reject);
});
this.cancel = cancelMethod;
}
getCancel() {
return this.cancel;
}
}
const promise = new CancellablePromise((resolve, reject) => {
setTimeout(() => resolve('Resolved'), 3000);
});
promise.then(result => console.log(result)).catch(error => console.log(error));
setTimeout(promise.cancel, 2000);
//const cancel = promise.getCancel();
//cancel();