Skip to main content

Command Palette

Search for a command to run...

Understanding Promise.all (with Custom Implementation)

Updated
2 min read
Understanding Promise.all (with Custom Implementation)
S

I'm Shubham (@shubhamsinghbundela), I'm a Software Engineer, a Full-stack developer, a tech enthusiast, and a technical writer here on @Hashnode. I have a strong zeal to share my acquired knowledge and I am also willing to learn from others.

What is Promise.all()?

Promise.all() is used to run multiple promises in parallel and wait until all of them complete.

Behavior:

  • If all promises resolve, it returns a resolved promise with an array of results.

  • If any one promise rejects, it immediately returns a rejected promise with that error.

  • It fails fast — meaning it doesn’t wait for other promises once one fails.

Example

const p1 = Promise.resolve(10);
const p2 = Promise.resolve(20);
const p3 = Promise.resolve(30);

Promise.all([p1, p2, p3])
  .then(result => {
    console.log(result); // [10, 20, 30]
  })
  .catch(err => {
    console.error(err);
  });

Rejection Case

const p1 = Promise.resolve(10);
const p2 = Promise.reject("Error in p2");
const p3 = Promise.resolve(30);

Promise.all([p1, p2, p3])
  .then(result => {
    console.log(result);
  })
  .catch(err => {
    console.error(err); // "Error in p2"
  });

Key Concept

Promise.all() follows fail-fast behavior — one failure stops everything.


Custom Implementation of Promise.all()

Let’s now understand how Promise.all() works internally by implementing it ourselves.


Code

function promiseAll(promises) {
    return new Promise((resolve, reject) => {
        let arr = [];
        let completed = 0;

        if (promises.length === 0) {
            resolve([]);
        }

        promises.forEach((element, index) => {
            Promise.resolve(element)
                .then((data) => {
                    arr[index] = data;
                    completed++;

                    if (completed === promises.length) {
                        resolve(arr);
                    }
                })
                .catch(reject);
        });
    });
}

More from this blog

Shubham Tech. Blog's

55 posts

Problem Solver | Currently Working As a Full Stack Developer, Community Leader At @Dev_Matrix | Previously Contributor at @RealDevSquad, @TeamShiksha