Extremely lightweight (270 bytes) library for evaluating promises sequentially with zero external dependencies.
const promiseAllSequential = require("promise-all-sequential");
const asyncFunc1 = async () => new Promise((resolve) => {
setTimeout(() => {
console.log("First");
resolve(1);
}, 1000);
});
const asyncFunc2 = async () => new Promise((resolve) => {
setTimeout(() => {
console.log("Second");
resolve(2);
}, 250);
});
// Prints "First", then "Second" and returns results
promiseAllSequential([asyncFunc1, asyncFunc2]).then((result) => {
console.log(result); // [1, 2]
});
Essentially, asyncFunc1
is guaranteed to finish before asyncFunc2
gets called. The result will be a promise which resolves with an array of results from the functions.
This is a Node.js module available through the npm registry.
Before installing, download and install Node.js.
Installation is done using the npm install
command:
$ npm install promise-all-sequential
Comparison with Promise.all()
that calls functions simultaneously:
// Prints "Second", then "First" - wrong order!
Promise.all([asyncFunc1(), asyncFunc2()]).then((results) => {
console.log(results); // [1, 2] - Correct
});
Comparison with chaining asynchronous functions:
// Using async function chaining
const arr = [];
const results = async1().then((r1) => {
arr.push(r1);
return async2().then((r2) => {
arr.push(r2);
return async3().then((r3) => {
arr.push(r3);
return arr;
});
})
});
console.log(results);
// Using this library
promiseAllSequential([async1, async2, async3]).then((results) => {
console.log(results);
});
Please note that you cannot initialize the promise directly, meaning that the following will not work:
const asyncFunc = new Promise(...);
This is because a promise starts executing its body as soon as it is created, making it no longer possible to force into sequential order. You must wrap the initialization into a function instead:
const asyncFunc = () => new Promise(...);
If you face any issues, please submit an issue or a pull request.
The author of promise-all-sequential is Jonatan Hamberg