Skip to content

Instantly share code, notes, and snippets.

@nqbao
Last active September 2, 2015 03:57
Show Gist options
  • Save nqbao/e9cc34d3a2bb07eed505 to your computer and use it in GitHub Desktop.
Save nqbao/e9cc34d3a2bb07eed505 to your computer and use it in GitHub Desktop.
cancelable promise prototype
function cancellablePromise(executor) {
var deferred = Promise.defer();
var cancelled = false;
var promise = new Promise(executor).then(function(result) {
if (!cancelled) deferred.resolve();
else return arguments[0]
});
var actualPromise = Promise.all(deferred.promise, promise)
.then(function(result) {
return result.pop(); // return the actual result
})
return {
cancel: function(reason) {
cancelled = true;
if (reason) {
deferred.reject(new Error(reason))
}
},
promise: actualPromise,
then: actualPromise.then.bind(actualPromise)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment