Bird
Raised Fist0
Node.jsframework~5 mins

Promise.race and Promise.allSettled in Node.js - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does Promise.race do in JavaScript?

Promise.race returns a new promise that settles as soon as any of the input promises settles (either resolves or rejects). It "races" all promises and settles with the first one that finishes.

Click to reveal answer
intermediate
What is the difference between Promise.allSettled and Promise.all?

Promise.allSettled waits for all promises to settle (resolve or reject) and returns their results regardless of success or failure. Promise.all waits for all to resolve but rejects immediately if any promise rejects.

Click to reveal answer
beginner
What does the result of Promise.allSettled look like?

It returns an array of objects, each with a status property ("fulfilled" or "rejected") and either a value (for fulfilled) or reason (for rejected).

Click to reveal answer
beginner
If you want to get the first promise that finishes regardless of success or failure, which method do you use?

You use Promise.race because it settles as soon as any promise settles, whether it resolves or rejects.

Click to reveal answer
beginner
Can Promise.allSettled be used to handle multiple promises without stopping on errors?

Yes, Promise.allSettled lets you wait for all promises to finish and see which succeeded or failed without stopping early due to errors.

Click to reveal answer
What does Promise.race return?
AThe last promise to resolve
BAn array of all resolved values
CAn array of all rejected reasons
DThe result of the first promise to settle (resolve or reject)
Which method waits for all promises to finish regardless of success or failure?
APromise.race
BPromise.allSettled
CPromise.all
DPromise.any
What happens if one promise rejects in Promise.all?
AIt immediately rejects with that error
BIt ignores the rejection
CIt waits for all promises anyway
DIt returns an array of results
What property indicates a promise was fulfilled in Promise.allSettled results?
Astatus: 'rejected'
Breason: 'fulfilled'
Cstatus: 'fulfilled'
Dvalue: 'fulfilled'
Which method would you use to get the fastest successful promise result, ignoring failures?
APromise.any
BPromise.allSettled
CPromise.race
DPromise.all
Explain how Promise.race works and give a simple example.
Think about a race where the first to finish wins.
You got /3 concepts.
    Describe the purpose of Promise.allSettled and how its results are structured.
    It tells you how every promise ended, no matter what.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does Promise.race do when given multiple promises?
      easy
      A. Cancels all promises except the first one.
      B. Waits for all promises to finish and returns their results.
      C. Returns only the results of promises that resolved successfully.
      D. Returns the result or error of the first promise that finishes.

      Solution

      1. Step 1: Understand Promise.race behavior

        Promise.race returns as soon as any promise settles (resolves or rejects).
      2. Step 2: Compare with other Promise methods

        Unlike Promise.all or allSettled, it does not wait for all promises.
      3. Final Answer:

        Returns the result or error of the first promise that finishes. -> Option D
      4. Quick Check:

        Promise.race = first finished promise result [OK]
      Hint: Remember race means first to finish wins [OK]
      Common Mistakes:
      • Thinking it waits for all promises
      • Assuming it only returns successful results
      • Believing it cancels other promises
      2. Which of the following is the correct syntax to use Promise.allSettled with an array of promises named tasks?
      easy
      A. Promise.allSettled(tasks).finally(() => console.log('done'));
      B. Promise.allSettled(tasks).catch(error => console.log(error));
      C. Promise.allSettled(tasks).then(results => console.log(results));
      D. Promise.allSettled(tasks).resolve(results => console.log(results));

      Solution

      1. Step 1: Recall Promise.allSettled usage

        Promise.allSettled returns a promise that resolves with an array of results.
      2. Step 2: Check correct method chaining

        We use .then() to handle the resolved results, not .catch() or .resolve().
      3. Final Answer:

        Promise.allSettled(tasks).then(results => console.log(results)); -> Option C
      4. Quick Check:

        Use .then() to get allSettled results [OK]
      Hint: Use .then() to handle Promise.allSettled results [OK]
      Common Mistakes:
      • Using .catch() instead of .then() for results
      • Trying to use .resolve() method on promise
      • Assuming .finally() receives results
      3. Consider the code:
      const p1 = new Promise(res => setTimeout(() => res('A'), 100));
      const p2 = new Promise((_, rej) => setTimeout(() => rej('Error'), 50));
      Promise.race([p1, p2])
        .then(console.log)
        .catch(console.error);

      What will be printed?
      medium
      A. 'Error'
      B. 'A'
      C. An array of results
      D. Nothing, code throws syntax error

      Solution

      1. Step 1: Identify which promise settles first

        p2 rejects after 50ms, p1 resolves after 100ms, so p2 finishes first.
      2. Step 2: Understand Promise.race behavior on rejection

        Promise.race rejects immediately with the first rejection, so .catch logs 'Error'.
      3. Final Answer:

        'Error' -> Option A
      4. Quick Check:

        First finished promise is rejection 'Error' [OK]
      Hint: Check which promise settles first, resolve or reject [OK]
      Common Mistakes:
      • Assuming resolve wins over reject
      • Expecting an array instead of single result
      • Thinking code throws syntax error
      4. What is wrong with this code snippet?
      const promises = [Promise.resolve(1), Promise.reject('fail')];
      Promise.allSettled(promises).catch(console.error);
      medium
      A. Promise.allSettled requires async/await syntax.
      B. Promise.allSettled never rejects, so .catch will never run.
      C. Promises array must contain only resolved promises.
      D. You must use .then() before .catch() with allSettled.

      Solution

      1. Step 1: Recall Promise.allSettled behavior

        It waits for all promises and never rejects, it always resolves with results.
      2. Step 2: Understand .catch usage here

        Since it never rejects, .catch will never be called, so error handling is ineffective.
      3. Final Answer:

        Promise.allSettled never rejects, so .catch will never run. -> Option B
      4. Quick Check:

        allSettled always resolves, .catch unused [OK]
      Hint: allSettled never rejects, so .catch is useless here [OK]
      Common Mistakes:
      • Thinking allSettled rejects on any promise failure
      • Believing async/await is required
      • Assuming .then() must come before .catch() always
      5. You want to run three tasks: task1, task2, and task3. You want to get the first task that finishes successfully, but if all fail, you want to know all errors. Which approach correctly achieves this?
      hard
      A. Use Promise.race on all tasks, then if it rejects, run Promise.allSettled to get all errors.
      B. Use Promise.allSettled first, then pick the first successful result from the array.
      C. Use Promise.all on all tasks and catch errors to get all results.
      D. Use Promise.race and ignore errors from rejected promises.

      Solution

      1. Step 1: Understand requirement for first success or all errors

        Promise.race gives first finished promise, but may reject if first is failure.
      2. Step 2: Combine Promise.race and Promise.allSettled

        If Promise.race rejects, then run Promise.allSettled to collect all errors from all tasks.
      3. Step 3: Evaluate other options

        Promise.allSettled alone waits for all, no early success; Promise.all fails fast; ignoring errors loses info.
      4. Final Answer:

        Use Promise.race on all tasks, then if it rejects, run Promise.allSettled to get all errors. -> Option A
      5. Quick Check:

        race first success, allSettled for all errors [OK]
      Hint: Race first success, fallback to allSettled for errors [OK]
      Common Mistakes:
      • Using allSettled only and waiting too long
      • Ignoring rejected promises in race
      • Using all which fails on first rejection