// A JavaScript Promise can be in several states:
// - Pending - response is not ready yet. Please wait.
// - Fulfilled - response is ready. Success. Take the data.
// - Rejected - an error occurred. Handle it.
// define the following function to get the PromiseState
function promiseState(p) {
const t = {};
return Promise.race([p, t])
.then(v => (v === t)? "pending" : "fulfilled", () => "rejected");
}
// create 3 test Promise examples:
var a = Promise.resolve();
var b = Promise.reject();
var c = new Promise(() => {});
// demonstrated value for each Promise example
promiseState(a).then(state => console.log(state)); // fulfilled
promiseState(b).then(state => console.log(state)); // rejected
promiseState(c).then(state => console.log(state)); // pending
// Check the state of a Promise
function yet(promise) {
const yettable = {
state: "pending",
isPending() { return promise.state == "pending"; },
isFulfilled() { return promise.state == "fulfilled"; },
isRejected() { return promise.state == "rejected"; },
};
Object.assign(promise, yettable);
promise
.then(result => (promise.state = "fulfilled", result))
.catch(err => (promise.state = "rejected", err));
return promise;
}