# Understanding Promise.any() (with Custom Implementation)

### What is Promise.any()?

`Promise.any()` is used to run multiple promises in parallel and **return the first successfully resolved promise**.

* * *

### Behavior:

*   If **any one promise resolves**, it immediately returns a resolved promise with that value.
    
*   If **all promises reject**, it returns a rejected promise with an `AggregateError` containing all errors.
    

* * *

### Example

```javascript
const p1 = Promise.reject("Error 1");
const p2 = Promise.resolve(20);
const p3 = Promise.resolve(30);

Promise.any([p1, p2, p3])
  .then(result => {
    console.log(result); // 20
  })
  .catch(err => {
    console.error(err);
  });
```

* * *

### Rejection Case

```javascript
const p1 = Promise.reject("Error 1");
const p2 = Promise.reject("Error 2");

Promise.any([p1, p2])
  .then(result => {
    console.log(result);
  })
  .catch(err => {
    console.error(err); 
    // AggregateError: All promises were rejected
    // err.errors => ["Error 1", "Error 2"]
  });
```

* * *

### Key Concept

`Promise.any()` follows **success-first behavior** — one success is enough.

* * *

### Custom Implementation of Promise.any()

Let’s now understand how `Promise.any()` works internally by implementing it ourselves.

### Code :

```javascript
function promiseAny(promises) {
    return new Promise((resolve, reject) => {
        let errors = [];
        let rejectedCount = 0;

        if (promises.length === 0) {
            reject(new Error("Empty iterable"));
        }

        promises.forEach((element, index) => {
            Promise.resolve(element)
                .then((data) => {
                    resolve(data); // first success wins
                })
                .catch((err) => {
                    errors[index] = err;
                    rejectedCount++;

                    if (rejectedCount === promises.length) {
                        reject(new AggregateError(errors, "All promises were rejected"));
                    }
                });
        });
    });
}
```

* * *

### 🔗Before You Go Further

If you haven’t read about `Promise.all()`, check it out here:

**Understanding Promise.all (with Custom Implementation)**  
[https://shubhamsinghbundela.hashnode.dev/understanding-promise-all-with-custom-implementation](https://shubhamsinghbundela.hashnode.dev/understanding-promise-all-with-custom-implementation)
