SaigonTech Vault
Loại: knowledge-doc 2026-09-29 active #wiki-import

How to use promise.all()

Syntax

Promise.all([Promise1, Promise2, Promise3])
  .then((result) => {
    console.log(result);
  })
  .catch((error) => console.log(`Error in promises ${error}`));
// OR

await Promise.all([Promise1, Promise2, Promise3]);

Init an async task

// a sample async function
const doTask = async (task) =>
  new Promise((resolve) =>
    setTimeout(() => {
      console.log(new Date().toLocaleTimeString() + " - Do task: ", task);
      resolve(true);
    }, 500)
  );

// a list
const loop = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

Some NG code

// a Bad way
console.time("Time way 1");
console.log(new Date().toLocaleTimeString() + " Start");
for (let i = 0; i < loop.length; i++) {
  await doTask(i);  // problem HERE: await in a loop
}
console.timeEnd("Time way 1");

// Output - sequentially - synchronous
1:05:59 PM Start way 1
1:05:59 PM - Do task:  0
1:06:00 PM - Do task:  1
1:06:00 PM - Do task:  2
1:06:01 PM - Do task:  3
1:06:01 PM - Do task:  4
1:06:02 PM - Do task:  5
1:06:02 PM - Do task:  6
1:06:03 PM - Do task:  7
1:06:03 PM - Do task:  8
1:06:04 PM - Do task:  9
Time way 1: 5009.138916015625 ms
// another Bad way
console.time("Time way 2");
console.log(new Date().toLocaleTimeString() + " Start");
const listPromises = [];
for (let i = 0; i < loop.length; i++) {
  listPromises.push(await doTask(i)); // problem HERE: await in a loop, promise.all dose not work HERE, just push to list
}
await Promise.all(listPromises); // DOES NOT work right, all tasks done
console.timeEnd("Time way 2");

// Output - sequentially - synchronous
1:06:04 PM Start way 2
1:06:04 PM - Do task:  0
1:06:05 PM - Do task:  1
1:06:05 PM - Do task:  2
1:06:06 PM - Do task:  3
1:06:06 PM - Do task:  4
1:06:07 PM - Do task:  5
1:06:07 PM - Do task:  6
1:06:08 PM - Do task:  7
1:06:08 PM - Do task:  8
1:06:09 PM - Do task:  9
Time way 2: 5012.115966796875 ms

Good code

// a Good way
console.time("Time way 3");
console.log(new Date().toLocaleTimeString() + " Start way 3");
const listPromises = [];
for (let i = 0; i < loop.length; i++) {
  listPromises.push(doTask(i)); // the tasks start running
}
await Promise.all(listPromises); // wait all tasks done
console.timeEnd("Time way 3");

// Output - asynchronous
1:06:09 PM Start way 3
1:06:09 PM - Do task:  0
1:06:09 PM - Do task:  1
1:06:09 PM - Do task:  2
1:06:09 PM - Do task:  3
1:06:09 PM - Do task:  4
1:06:09 PM - Do task:  5
1:06:09 PM - Do task:  6
1:06:09 PM - Do task:  7
1:06:09 PM - Do task:  8
1:06:09 PM - Do task:  9
Time way 3: 502.583984375 ms

// a Good way
console.time("Time way 4");
console.log(new Date().toLocaleTimeString() + " Start");
// the BEST WAY for readable
await Promise.all(
  loop.map(async (item) => {
    return await doTask(item);
  })
);
console.timeEnd("Time way 4");


// Output - asynchronous
1:06:09 PM Start
1:06:10 PM - Do task:  1
1:06:10 PM - Do task:  2
1:06:10 PM - Do task:  3
1:06:10 PM - Do task:  4
1:06:10 PM - Do task:  5
1:06:10 PM - Do task:  6
1:06:10 PM - Do task:  7
1:06:10 PM - Do task:  8
1:06:10 PM - Do task:  9
1:06:10 PM - Do task:  10
Time way 4: 501.93310546875 ms