비동기 프로그래밍에서 'promise.any'의 개념은 무엇인가요?
_____A1: Promise.any는 JavaScript의 비동기 프로그래밍에서 사용되는 메서드로, 전달된 여러 개의 프라미스(Promise) 중에서 가장 먼저 '이행(fulfilled)'된 프라미스의 결과를 반환합니다. 즉, 여러 비동기 작업 중 제일 빨리 성공한 결과만을 받고 싶을 때 사용합니다.
Q2: Promise.any는 어떻게 동작하나요?
A2: Promise.any는 배열로 전달된 프라미스들을 동시에 실행하며, 그중 하나라도 성공(fulfilled)하면 즉시 그 결과 값을 반환하고 나머지 프라미스의 결과는 무시합니다. 만약 전달된 모든 프라미스가 실패(rejected)하면, AggregateError라는 에러를 반환합니다.
Q3: Promise.any와 Promise.race의 차이점은 무엇인가요?
A3: Promise.race는 가장 먼저 완료된(성공 또는 실패) 프라미스의 결과를 반환하지만, Promise.any는 가장 먼저 성공한 프라미스만 반환합니다. 즉, race는 성공과 실패 모두 첫 완료를 기준으로 하지만, any는 성공 결과가 나올 때까지 기다립니다.
Q4: 언제 Promise.any를 사용하면 좋은가요?
A4: 여러 비동기 작업 중 하나라도 성공하면 되는데, 실패한 경우는 무시하고 싶을 때 사용합니다. 예를 들어, 여러 서버에서 데이터를 요청하고 가장 빠른 성공 응답만 필요할 때 유용합니다.
Q5: Promise.any에서 모든 프라미스가 실패하면 어떻게 되나요?
A5: 모든 프라미스가 실패하면 Promise.any는 reject 상태로 끝나며, AggregateError라는 에러 객체를 throw합니다. 이 에러는 실패한 모든 프라미스의 이유들을 포함합니다.
Q6: Promise.any는 어떻게 사용하는 예시가 있나요?
A6:
const p1 = Promise.reject("Error 1");
const p2 = new Promise(resolve => setTimeout(resolve, 500, "Success 2"));
const p3 = new Promise(resolve => setTimeout(resolve, 1000, "Success 3"));
Promise.any([p1, p2, p3])
.then(result => console.log(result)) // "Success 2"
.catch(error => console.error(error));
```
위 예시에서 p2가 가장 먼저 성공하므로 "Success 2"가 출력됩니다.
Q7: Promise.any가 지원되지 않는 환경에서 대체할 방법이 있나요?
A7: 폴리필(polyfill)을 이용하거나, Promise.allSettled로 모든 프라미스 상태를 확인한 후, 성공한 첫 결과를 수동으로 선택하는 방법이 있습니다. 다만, 직접 구현하는 경우 성능과 코드 복잡성이 증가할 수 있습니다.
---
요약하자면, Promise.any는 여러 프라미스 중 '최초 성공 결과'를 빠르게 얻고자 할 때 사용하는 비동기 유틸리티로, 실패는 무시하며 단 하나라도 성공하면 그 결과를 즉시 반환하는 특징이 있습니다.
작성자:
최윤수 [비회원]
| 작성일자: 1년 전
2024-09-12 16:03:46
조회수: 227 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 227 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.