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();