w3resource

JavaScript Promise.any Explained with simple examples


Promise.any() Example:

Write a JavaScript function that takes multiple Promises and resolves with the first successful result using Promise.any().

Solution-1: Basic Use of Promise.any()

Code:

// Define multiple Promises
const promise1 = new Promise((resolve, reject) => setTimeout(reject, 1000, "Error in promise1"));
const promise2 = new Promise((resolve) => setTimeout(resolve, 500, "Success from promise2"));
const promise3 = new Promise((resolve) => setTimeout(resolve, 2000, "Success from promise3"));

// Use Promise.any to resolve with the first successful result
Promise.any([promise1, promise2, promise3])
  .then((result) => {
    console.log("First successful result:", result); // Logs: "Success from promise2"
  })
  .catch((error) => {
    console.error("All promises rejected:", error);
  });

Output:

"First successful result:"
"Success from promise2"

Explanation:

  • Three Promises are defined:
    • promise1 rejects after 1 second.
    • promise2 resolves successfully after 0.5 seconds.
    • promise3 resolves successfully after 2 seconds.
  • Promise.any() is used to resolve with the first successful result.
  • Since promise2 resolves first, its result is logged: "Success from promise2".
  • If all Promises reject, the .catch() block logs the AggregateError.

Solution-2: Using Promise.any() with Dynamic Promise Creation

Code:

// Function to simulate an asynchronous operation
const asyncTask = (taskName, time, shouldReject = false) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (shouldReject) {
        reject(`${taskName} failed`);
      } else {
        resolve(`${taskName} completed`);
      }
    }, time);
  });
};

// Use Promise.any with dynamically created Promises
const tasks = [
  asyncTask("Task 1", 1000, true), // Rejects
  asyncTask("Task 2", 500),        // Resolves
  asyncTask("Task 3", 1500)        // Resolves
];

Promise.any(tasks)
  .then((result) => {
    console.log("First successful result:", result); // Logs: "Task 2 completed"
  })
  .catch((error) => {
    console.error("All tasks failed:", error);
  });

Output:

"First successful result:"
"Task 2 completed"

Explanation:

  • A helper function asyncTask simulates asynchronous operations with configurable delay and success/failure behavior.
  • The tasks array contains Promises generated using asyncTask:
    • Task 1 rejects after 1 second.
    • Task 2 resolves after 0.5 seconds.
    • Task 3 resolves after 1.5 seconds.
  • Promise.any() is used to handle the Promises and resolve with the first successful task result.
  • "Task 2 completed" is logged because Task 2 resolves first.

See the Pen promises-and-async-await-exercise-4 by w3resource (@w3resource) on CodePen.


For more Practice: Solve these Related Problems:

  • Write a JavaScript function that uses Promise.any() on an array of Promises with varying delays and returns the first successful result.
  • Write a JavaScript function that races multiple API calls and returns the fastest successful response using Promise.any().
  • Write a JavaScript function that demonstrates Promise.any() with a mix of Promises where some are intentionally set to reject.
  • Write a JavaScript function that applies Promise.any() to a list of network request simulations with random delays.

Go to:


PREV : Handling Promise Rejection.
NEXT : Promise.allSettled() Example.

Improve this sample solution and post your code through Disqus

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.