Skip to content

Instantly share code, notes, and snippets.

@nolanlawson
Last active August 22, 2024 14:19
Show Gist options
  • Save nolanlawson/6ce81186421d2fa109a4 to your computer and use it in GitHub Desktop.
Save nolanlawson/6ce81186421d2fa109a4 to your computer and use it in GitHub Desktop.
Promise protips - stuff I wish I had known when I started with Promises
// Promise.all is good for executing many promises at once
Promise.all([
promise1,
promise2
]);
// Promise.resolve is good for wrapping synchronous code
Promise.resolve().then(function () {
if (somethingIsNotRight()) {
throw new Error("I will be rejected asynchronously!");
} else {
return "This string will be resolved asynchronously!";
}
});
// execute some promises one after the other.
// this takes an array of promise factories, i.e.
// an array of functions that RETURN a promise
// (not an array of promises themselves; those would execute immediately)
function sequentialize(promiseFactories) {
var chain = Promise.resolve();
promiseFactories.forEach(function (promiseFactory) {
chain = chain.then(promiseFactory);
});
return chain;
}
// Promise.race is good for setting a timeout:
Promise.race([
new Promise(function (resolve, reject) {
setTimeout(reject, 10000); // timeout after 10 secs
}),
doSomethingThatMayTakeAwhile()
]);
// Promise finally util similar to Q.finally
// e.g. promise.then(...).catch().then(...).finally(...)
function finally (promise, cb) {
return promise.then(function (res) {
var promise2 = cb();
if (typeof promise2.then === 'function') {
return promise2.then(function () {
return res;
});
}
return res;
}, function (reason) {
var promise2 = cb();
if (typeof promise2.then === 'function') {
return promise2.then(function () {
throw reason;
});
}
throw reason;
});
};
@JestVA
Copy link

JestVA commented Jan 13, 2019

Great article, still a rookie to understand promises and make useful application of the concepts.

@xgqfrms
Copy link

xgqfrms commented Nov 16, 2020

👍 awesome promise article

@delbaredouard
Copy link

delbaredouard commented Jan 17, 2022

Thanks for that :-D

putYourRightFootIn()
  .then(putYourRightFootOut)
  .then(putYourRightFootIn)  
  .then(shakeItAllAbout);

Taken from your enlightening easy to read blog post.

@JanithaR
Copy link

What's a good use case for wrapping synchronous code with a Promise?

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