Skip to content

Instantly share code, notes, and snippets.

@Keireira
Created December 3, 2018 12:02
Show Gist options
  • Select an option

  • Save Keireira/2ae4bc9ae64d7c66c333a1952a455d26 to your computer and use it in GitHub Desktop.

Select an option

Save Keireira/2ae4bc9ae64d7c66c333a1952a455d26 to your computer and use it in GitHub Desktop.
// @flow
export type PromiseHandler = {
promise: Promise<*>,
cancel: () => void,
}
export default function makeCancelable(promise: Promise<*>): PromiseHandler {
let hasCanceled = false
const wrappedPromise = new Promise((resolve, reject) => {
promise.then(
(val) => hasCanceled ? reject({ isCanceled: true }) : resolve(val),
(error) => hasCanceled ? reject({ isCanceled: true }) : reject(error)
)
})
return {
promise: wrappedPromise,
cancel() {
hasCanceled = true
},
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment