Skip to content

4.1.0

Compare
Choose a tag to compare
@sebdvd sebdvd released this 16 Jun 08:04
· 1421 commits to master since this release
403db3f
  • Prepare release without commit
  • Cancel cancelable promise returned by a then/catch callback

Consider this example:

const { CancelablePromise } = require('cancelable-promise');

const promise1 = new CancelablePromise((resolve, reject, onCancel) => {
  const timer = setTimeout(() => {
    console.log('resolve promise1');
    resolve();
  }, 1000);
  const abort = () => {
    clearTimeout(timer);
  };
  onCancel(abort);
});

const promise2 = promise1.then(() => {
  const promise3 = new CancelablePromise((resolve, reject, onCancel) => {
    const timer = setTimeout(() => {
      console.log('resolve promise 3');
      resolve();
    }, 1000);
    const abort = () => {
      clearTimeout(timer);
    };
    onCancel(abort);
  });
  return promise3;
});

setTimeout(() => {
  console.log('cancel promise 2');
  promise2.cancel();
}, 1500);

Before this release, output was:

resolve promise1
cancel promise 2
resolve promise 3

Now if you return a cancelable promise in a then/catch callback, it will cancel it too when you are canceling the parent promise. Output will be:

resolve promise1
cancel promise 2