Skip to content

Instantly share code, notes, and snippets.

@carloslfu
Last active October 21, 2018 12:03
Show Gist options
  • Save carloslfu/b7758038bbcb6741cbd60830065d100a to your computer and use it in GitHub Desktop.
Save carloslfu/b7758038bbcb6741cbd60830065d100a to your computer and use it in GitHub Desktop.
Cancellable Promise Example
function CPromise (fn) {
let obj = {}
let p = new Promise((resolve, reject) => {
fn(resolve, reject, obj)
obj.reject = reject
})
p.cancel = () => {
if (obj.oncancel) {
obj.oncancel()
}
obj.reject('cancelled')
}
return p
}
var p = CPromise((resolve, reject, p) => {
let timeout = setTimeout(() => {
console.log('is completed!!')
resolve('completed')
}, 2000)
p.oncancel = () => clearTimeout(timeout)
})
p.then(r => console.log(r)).catch(err => console.log('Error: ' + err))
setTimeout(() => p.cancel(), 1000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment