Skip to content

Instantly share code, notes, and snippets.

@aztack
Forked from tyru/promise-is-resolved.js
Created July 13, 2020 04:44
Show Gist options
  • Save aztack/f658181a0738219d39331f2a4302ed93 to your computer and use it in GitHub Desktop.
Save aztack/f658181a0738219d39331f2a4302ed93 to your computer and use it in GitHub Desktop.
Check whether a promise is finished / resolved / rejected
function delay(msec, value) {
return new Promise(done => window.setTimeout((() => done(value)), msec));
}
function isResolved(promise) {
  return Promise.race([delay(0, false), promise.then(() => true, () => false)]);
}
function isRejected(promise) {
  return Promise.race([delay(0, false), promise.then(() => false, () => true)]);
}
function isFinished(promise) {
  return Promise.race([delay(0, false), promise.then(() => true, () => true)]);
}
isFinished(Promise.resolve(42)).then(result => console.log(result ? "Resolved" : "Not resolved"));
// => "Resolved"
isFinished(delay(100)).then(result => console.log(result ? "Resolved" : "Not resolved"));
// => "Not resolved"
isFinished(delay(1)).then(result => console.log(result ? "Resolved" : "Not resolved"));
// => "Resolved"
// oh...
@aztack
Copy link
Author

aztack commented Jul 13, 2020

isResolved => promise.then( resolved=true, reject=false)
isRejcted => promise.then( resolved=false, reject=true)
isFinished => promise.then( resolved=true, reject=true)

@aztack
Copy link
Author

aztack commented Jul 13, 2020

race the given promise(A) with a promise(B) which is definitely resolved in the next macro task.
if B is settled it will win the race, otherwise A will.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment