비동기 처리를 위한 'Promise.all'의 사용법은 무엇인가요?
_____A1: Promise.all은 여러 개의 프로미스(Promise)를 병렬로 실행하고, 모든 프로미스가 완료될 때까지 기다린 후 결과를 배열로 반환하는 자바스크립트 내장 함수입니다.
Q2: Promise.all을 사용하는 기본 문법은 어떻게 되나요?
A2:
```javascript
Promise.all([promise1, promise2, promise3])
.then((results) => {
// 모든 프로미스가 성공했을 때 results는 각 프로미스의 결과 배열
})
.catch((error) => {
// 하나라도 실패하면 여기로 에러가 전달됨
});
```
Q3: Promise.all은 언제 주로 사용되나요?
A3: 여러 비동기 작업을 동시에 실행하고, 모든 작업이 완료된 후에 다음 처리를 해야 할 때 사용합니다. 예를 들어, 여러 API 호출을 병렬로 처리할 때 유용합니다.
Q4: Promise.all에 전달되는 인자는 무엇인가요?
A4: 배열 또는 이터러블(iterable)한 객체로, 각 원소는 프로미스이거나 일반 값일 수 있습니다. 일반 값은 즉시 성공(resolve)된 프로미스로 간주합니다.
Q5: Promise.all의 반환값은 무엇인가요?
A5: 반환값은 새로운 프로미스입니다. 이 프로미스는 전달받은 모든 프로미스가 성공할 때 성공하며, 각 결과를 배열로 반환합니다.
Q6: Promise.all에서 하나의 프로미스라도 실패하면 어떻게 되나요?
A6: 배열 내 프로미스 중 하나라도 거부(reject)되면, Promise.all의 반환 프로미스도 즉시 거부되고, catch 블록의 에러 핸들러로 넘어갑니다. 나머지 프로미스 결과는 무시됩니다.
A7: 입력 배열 순서대로 결과 배열에 저장됩니다. 즉, 비동기 완료 순서와 상관없이 입력 배열 순서를 유지합니다.
Q8: Promise.all과 async/await를 함께 쓸 수 있나요?
A8: 네, 사용 가능합니다. 예:
```javascript
async function fetchAll() {
try {
const results = await Promise.all([fetch(url1), fetch(url2)]);
// results는 [url1 결과, url2 결과]
} catch (err) {
// 에러 처리
}
}
```
Q9: allSettled, race와 Promise.all의 차이는 무엇인가요?
A9:
- Promise.all은 모든 프로미스가 성공해야 성공. 실패 시 즉시 reject.
- Promise.allSettled는 모든 프로미스의 성공/실패 여부와 상관없이 완료 후 각 결과 상태를 배열로 반환.
- Promise.race는 가장 먼저 완료된(성공 또는 실패) 프로미스의 결과를 반환.
Q10: Promise.all을 사용할 때 주의할 점이 있나요?
A10:
- 프로미스 중 하나라도 실패하면 전체가 실패하므로, 실패 가능성이 있는 프로미스는 별도 에러 처리 필요.
- 너무 많은 프로미스를 한번에 실행하면 리소스 문제 발생 가능. 적절한 병렬 처리 제한이 필요할 수 있음.
- 결과가 입력 순서대로 반환됨을 명심하고, 순서에 의존하는 로직 작성.
작성자:
박지우 [비회원]
| 작성일자: 1년 전
2024-09-12 16:03:42
조회수: 214 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 214 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.