JavaScript Interview Questions
  • JavaScript Interview Questions
  • Contact
  • Introduction
  • Question 1
  • Question 2
  • Question 3
  • Question 4
  • Question 5
  • Question 6
  • Question 7
  • Question 8
  • Question 9
  • Question 10
  • Question 11
  • Question 12
  • Question 13
  • Question 14
  • Question 15
  • Question 16
  • Question 17
  • Question 18
  • Question 19
  • Question 20
  • Question 21
  • Question 22
  • Question 23
  • Question 24
  • Question 25
  • Question 26
  • Question 27
  • Question 28
  • Question 29
  • Question 30
  • Question 31
  • Question 32
  • Question 33
  • Question 34
  • Question 35
  • Question 36
  • Question 37
  • Question 38
  • Question 39
  • Question 40
  • Question 41
  • Question 42
  • Question 43
  • Question 44
  • Question 45
  • Question 46
  • Question 47
  • Question 48
  • Question 49
  • Question 50
  • Question 51
  • Question 52
  • Question 53
  • Question 54
  • Question 55
  • Question 56
  • Question 57
  • Question 58
  • Question 59
  • Question 60
  • Question 61
  • Question 62
  • Question 63
  • Question 64
  • Question 65
  • Question 66
  • Question 67
  • Question 68
  • Question 69
  • Question 70
  • Question 71
  • Question 72
  • Question 73
  • Question 74
  • Question 75
  • Question 76
  • Question 77
  • Question 78
  • Question 79
  • Question 80
  • Question 81
  • Question 82
  • Question 83
  • Question 84
  • Question 85
  • Question 86
  • Question 87
  • Question 88
  • Question 89
  • Question 90
  • Question 91
  • Question 92
  • Question 93
  • Question 94
  • Question 95
  • Question 96
  • Question 97
  • Question 98
  • Question 99
  • Question 100
  • Epilogue
Powered by GitBook
On this page
  • Question
  • Answer

Question 19

Question

Can you explain the difference between Promise.all(), Promise.allSettled(), Promise.race(), and Promise.any().

Answer

Each of the methods Promise.all(), Promise.allSettled(), Promise.race(), and Promise.any() provides a unique way to manage the resolution or rejection of multiple promises, catering to different use cases. Let's examine their distinct behaviors:

1. Promise.all()

Promise.all() accepts an iterable of promises as input and returns a new promise that resolves when all the input promises resolve successfully. If any of the input promises rejects, the returned promise also rejects with the reason from the first rejected promise. Essentially, Promise.all() acts as a collective success checkpoint for multiple asynchronous operations.

const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve, reject) => { 
  setTimeout(() => resolve('Resolved'), 1000); 
});
const promise3 = Promise.reject('Rejected');

Promise.all([promise1, promise2, promise3])
  .then((values) => {
    console.log("All promises resolved:", values); // This block will not execute
  })
  .catch((error) => {
    console.error("At least one promise rejected:", error); // Outputs: At least one promise rejected: Rejected
  });

2. Promise.allSettled()

Promise.allSettled() behaves similarly to Promise.all(), but it returns an array of settled promises, regardless of whether they resolved or rejected. Each element in the returned array represents the state and result (if any) of the corresponding input promise. This method is useful when you need information about the status of all promises, even if some failed.

Promise.allSettled([promise1, promise2, promise3])
  .then((results) => {
    console.log("All promises settled:", results); 
  });

3. Promise.race()

Promise.race() accepts an iterable of promises and returns a new promise that resolves or rejects as soon as one of the input promises does so. It prioritizes speed, resolving or rejecting based on the fastest outcome among the given promises. This method is useful when you need to handle the first completed promise without waiting for others.

const fastPromise = Promise.resolve('Fast');
const slowPromise = new Promise((resolve) => setTimeout(resolve, 1000, 'Slow'));

Promise.race([fastPromise, slowPromise])
  .then((result) => {
    console.log("First promise resolved:", result); // Outputs: First promise resolved: Fast
  });

4. Promise.any()

Promise.any() accepts an iterable of promises and returns a new promise that resolves with the value of the first promise to resolve in the input iterable. If all input promises reject, Promise.any() rejects with an AggregateError containing information about all rejected promises. This method is useful when you need to wait for at least one promise to succeed, regardless of how many others might fail.

const successfulPromise = Promise.resolve('Success');
const failingPromises = [
  new Promise((_, reject) => reject('Rejected 1')),
  new Promise((_, reject) => reject('Rejected 2'))
];

Promise.any([successfulPromise, ...failingPromises])
  .then((result) => {
    console.log("First resolved promise:", result); // Outputs: First resolved promise: Success
  })
  .catch((error) => {
    console.error("All promises rejected:", error); 
  });
PreviousQuestion 18NextQuestion 20

Last updated 9 months ago