Skip to content

Instantly share code, notes, and snippets.

@Mahdhir
Created October 18, 2020 10:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Mahdhir/1f6609ea75f45c07801168c18cdb3812 to your computer and use it in GitHub Desktop.
Save Mahdhir/1f6609ea75f45c07801168c18cdb3812 to your computer and use it in GitHub Desktop.
function timeout(delay) {
let cancel;
const wait = new Promise(resolve => {
const timer = setTimeout(() => resolve(false), delay);
cancel = () => {
clearTimeout(timer);
resolve(true);
};
});
wait.cancel = cancel;
return wait;
}
function doWork() {
const workFactor = Math.floor(600*Math.random());
const work = timeout(workFactor);
const result = work.then(canceled => {
if (canceled)
console.log('Work canceled');
else
console.log('Work done in', workFactor, 'ms');
return !canceled;
});
result.cancel = work.cancel;
return result;
}
function attemptWork() {
const work = doWork();
return Promise.race([work, timeout(300)])
.then(done => {
if (!done)
work.cancel();
return (done ? 'Work complete!' : 'I gave up');
});
}
attemptWork().then(console.log);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment