Skip to content

Instantly share code, notes, and snippets.

@horiuchie
Last active October 25, 2019 01:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save horiuchie/fd28ba5d9cd8d02f0b24efafef3c71c1 to your computer and use it in GitHub Desktop.
Save horiuchie/fd28ba5d9cd8d02f0b24efafef3c71c1 to your computer and use it in GitHub Desktop.
import Promise from 'bluebird';
Promise.config({ cancellation: true });
const cancellableDelay = (time, cancelHandler) =>
new Promise((resolve, reject, onCancel) => {
const timer = setTimeout(resolve, time);
onCancel(() => {
clearTimeout(timer);
cancelHandler();
});
});
//////////////////// example ////////////////////
console.log(`start at ${new Date()}`);
const delayPromise = cancellableDelay(5000, () => {
console.log(`cancelled at ${new Date()}`);
});
delayPromise.then(() => {
console.log(`resolved at ${new Date()}`);
});
/*
cancel 2 seconds later.
*/
setTimeout(() => {
delayPromise.cancel();
}, 2000);
/*
resolve 5 seconds later.
setTimeout(() => {
delayPromise.cancel(); // no meaning
}, 6000);
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment