Nagging Penguin Matriarchs

    promise-all-sequential

    1.0.0 • Public • Published

    promise-all-sequential

    NPM Version License

    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.

    Installation

    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

    Examples

    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);
    });

    Troubleshooting

    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.

    People

    The author of promise-all-sequential is Jonatan Hamberg

    List of all contributors

    License

    MIT

    Install

    npm i promise-all-sequential

    DownloadsWeekly Downloads

    95

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    5.64 kB

    Total Files

    4

    Last publish

    Collaborators

    • jhamberg