"가장 빠른 것" 에 반응하는 두가지 메서드 ## 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]] - 여러 작업을 모두 실행