FrontendInterviews.dev

Loading problem…

20. Promise.any

Medium•
Acceptance: 94.44%
•
🔓3/3 Pro unlocks today

Implement Promise.any utility function that works like the native Promise.any method.

Requirements

1. Basic Functionality

  • Accept an array of promises (or values)
  • Return a promise that resolves with the first resolved promise
  • Reject only if all promises reject
  • Reject with AggregateError containing all rejection reasons
  • Handle non-promise values

Example Usage

// Example: First resolved promise
const fast = Promise.reject('fast error');
const slow = new Promise(resolve => setTimeout(() => resolve('slow'), 100));

promiseAny([fast, slow]).then(value => {
  console.log(value); // 'slow' (first resolved)
});

// Example: All reject
promiseAny([
  Promise.reject('error1'),
  Promise.reject('error2')
]).catch(error => {
  console.log(error.errors); // ['error1', 'error2']
});

Constraints

  • Promise.any should resolve with first resolved promise
  • Promise.any should reject with AggregateError if all reject
  • Handle non-promise values correctly
  • Handle empty arrays