"가장 빠른 것" 에 반응하는 두가지 메서드
## Promise.race()
[Promise.race() - JavaScript \| MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race)
전달된 Promise 중 **가장 먼저 완료된(settled) Promise**의 결과를 그대로 따른다.
가장 먼저 완료된 Promsie가 fulfilled 상태라면 전체가 성공하고, reject 상태라면 전체가 실패로 처리되는 것이다.
즉 가장 먼저 끝난 작업이 실패라면, 다른 Promise들의 상태와는 관계 없이 즉시 reject된다.
```javascript
// 네트워크 응답 중에 가장 빠른 것만 처리하고 싶을 때
const result = await Promise.race([
fetchFromPrimary(),
fetchFromBackup()
]);
```
## Promise.any()
[Promise.any() - JavaScript \| MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/any)
전달된 Promise 중 가장 먼저 fulfilled된 Promise만 반환단다.
fulfilled된 Promise가 없는 경우(모두 실패한 경우)에는 `AggregateError` 가 발생하고 reject된다.
```javascript
// 여러 미러 서버에 요청하는 경우. 하나만 성공하면 된다.
try {
const result = await Promise.any([
fetchFromMirror1(),
fetchFromMirror2(),
fetchFromMirror3()
]);
} catch (error) {
console.error('모든 요청이 실패함:', error);
}
```
## 차이점
| 항목 | Promise.race | Promise.any |
| ----- | -------------------------------------------------- | --------------------------------------- |
| 완료 조건 | 가장 먼저 settled되는 Promise가 등장하는 경우 | 가장 먼저 fulfilled되는 Promise가 등장하는 경우 |
| 실패 조건 | 가장 먼저 settled되는 Promise가 rejected인 경우 -> 전체 reject | fulfilled되는 Promise가 없는 경우 -> 전체 reject |
| 반환 값 | 가장 먼저 settled된 Promise의 결과 | 첫 번째 fulfilled 값 |
| 사용 목적 | 성공 여부 상관 없이 가장 빠른 결과가 필요할 때 | 하나만 성공하면 될 때 |
## 관련 문서
- [[Promise.all]] - 여러 작업을 동시에 모두 실행 + 모두 성공
- [[Promise.allSettled]] - 여러 작업을 모두 실행