JSFiddle - React, Tailwind, and code Playground
by gianlucaguarini
JavaScript
// https://gist.github.com/GianlucaGuarini/78df965fa13064fb7caaa07931f12949
function wait(delay) {
return (val) => {
let timer
let abort
const p = new Promise(function(resolve, reject) {
abort = reject
timer = setTimeout(() => resolve(val), delay)
})
p.cancel = () => clearTimeout(timer)
p.abort = reason => p.cancel() || abort(reason)
return p
}
}
const wait2sec = wait(2000)
const job1 = wait2sec('job1 done')
const job2 = wait2sec('job2 done')
const job3 = wait2sec('job3 done')
job1.then(console.log)
// cancellable
job1.cancel()
job2.then(console.log)
// abortable!
job3.then(console.log).catch(console.log)
job3.abort('Aborted')