Skip to content

Instantly share code, notes, and snippets.

@pindlebot
Created November 17, 2019 03:22
Show Gist options
  • Save pindlebot/cf0747abeddda8a22d96af519cc1b8a0 to your computer and use it in GitHub Desktop.
Save pindlebot/cf0747abeddda8a22d96af519cc1b8a0 to your computer and use it in GitHub Desktop.
const makeCancelable = (promise) => {
let isCanceled = false
const wrappedPromise = new Promise((resolve, reject) => {
promise.then(
val => isCanceled ? reject({ isCanceled: true }) : resolve(val), // eslint-disable-line prefer-promise-reject-errors
error => isCanceled ? reject({ isCanceled: true }) : reject(error) // eslint-disable-line prefer-promise-reject-errors
)
})
return {
promise: wrappedPromise,
cancel: () => {
isCanceled = true
},
isCanceled
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment