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')