content/snippets/js/s/async-cheatsheet.md
Promise constructor will execute synchronously.resolve() or reject() to create promises from values.Promise.resolve(val) will fulfill the promise with val.Promise.reject(err) will reject the promise with err.// Resolving with a value, rejecting with an error
new Promise((resolve, reject) => {
performOperation((err, val) => {
if (err) reject(err);
else resolve(val);
});
});
// Resolving without value, no need for reject
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
Promise.prototype.then() accepts two optional arguments (onFulfilled, onRejected).
Promise.prototype.then() will call onFulfilled once the promise is fulfilled.
Promise.prototype.then() will call onRejected if the promise is rejected.
Promise.prototype.then() passes errors through if onRejected in undefined.
Promise.prototype.catch() accepts one argument (onRejected).
Promise.prototype.catch() behaves like Promise.prototype.then() when onFulfilled is omitted.
Promise.prototype.catch() passes fulfilled values through.
Promise.prototype.finally() accepts one argument (onFinally).
Promise.prototype.finally() calls onFinally with no arguments once any outcome is available.
Promise.prototype.finally() passes through input promise.
promisedOperation()
.then(
val => value + 1, // Called once the promise is fulfilled
err => { // Called if the promise is rejected
if (err === someKnownErr) return defaultVal;
else throw err;
}
)
.catch(
err => console.log(err); // Called if the promise is rejected
)
.finally(
() => console.log('Done'); // Called once any outcome is available
);
Promise.all() turns an array of promises into a promise of an array.Promise.race() passes through the first settled promise.Promise
.all([ p1, p2, p3 ])
.then(([ v1, v2, v3 ]) => {
// Values always correspond to the order of promises,
// not the order they resolved in (i.e. v1 corresponds to p1)
});
Promise
.race([ p1, p2, p3 ])
.then(val => {
// val will take the value of the first resolved promise
});
async function always results in a promise.(async () => value)() will resolve to value.(async () => throw err)() will reject with an error.await waits for a promise to be fulfilled and returns its value.await can only be used in async functions.await also accepts non-promise values.await always waits at least until the next tick before resolving, even when waiting already fulfilled promises or non-promise values.async () => {
try {
let val = await promisedValue();
// Do stuff here
} catch (err) {
// Handle error
}
}