비동기 프로그래밍에서 'promise.allSettled'의 사용법은 무엇인가요?
_____A1: `Promise.allSettled()`는 여러 개의 프로미스(Promise)를 병렬로 실행하고, 모든 프로미스가 이행(fulfilled) 또는 거부(rejected) 상태가 될 때까지 기다린 후, 각 프로미스의 상태와 결과를 포함한 배열을 반환하는 메서드입니다.
---
Q2: `Promise.allSettled()`와 `Promise.all()`의 차이점은 무엇인가요?
A2: `Promise.all()`은 모든 프로미스가 이행되어야 성공하며, 하나라도 거부되면 즉시 거부됩니다. 반면, `Promise.allSettled()`는 모든 프로미스가 완료될 때까지 기다리고, 각각의 결과(성공 또는 실패)를 포함한 상태를 반환하여 실패에 영향을 받지 않습니다.
---
Q3: `Promise.allSettled()`의 기본 사용법은 어떻게 되나요?
A3:
```javascript
const promises = [promise1, promise2, promise3];
Promise.allSettled(promises).then(results => {
results.forEach((result) => {
if (result.status === 'fulfilled') {
console.log('성공:', result.value);
} else {
console.log('실패:', result.reason);
}
});
});
```
배열 안에는 프로미스 객체를 넣고, 반환된 결과를 순회하면서 각 프로미스 상태와 값을 구분해 처리합니다.
---
Q4: 반환되는 결과 객체의 구조는 어떻게 되나요?
A4: 반환되는 배열의 각 요소는 다음 중 하나의 객체입니다:
- 성공 시: `{ status: 'fulfilled', value: /* resolved value */ }`
- 실패 시: `{ status: 'rejected', reason: /* error or rejection reason */ }`
---
Q5: 언제 `Promise.allSettled()`를 사용하면 좋나요?
A5:
- 여러 비동기 작업을 병렬 처리해야 하지만, 각각의 성공 또는 실패 결과를 개별적으로 처리하고자 할 때
- 일부 프로미스가 실패해도 전체 작업을 중단하지 않고, 모두 완료된 후 상태별로 결과를 확인하고 싶을 때
---
Q6: `async/await`와 함께 `Promise.allSettled()`를 사용하는 방법은?
A6:
```javascript
const promises = [asyncTask1(), asyncTask2(), asyncTask3()];
async function runAll() {
const results = await Promise.allSettled(promises);
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log('성공:', result.value);
} else {
console.log('실패:', result.reason);
}
});
}
runAll();
```
---
Q7: 지원 브라우저/환경은 어떻게 되나요?
A7: `Promise.allSettled()`는 ECMAScript 2020(ES11)에서 도입되었으며, 최신 브라우저와 Node.js 12.9 이상부터 기본 지원합니다. 구형 환경에서는 폴리필(polyfill)이 필요할 수 있습니다.
---
Q8: 주의할 점이나 단점이 있나요?
A8:
- 실패한 프로미스를 반환된 배열에서 별도로 처리해야 하므로, 실패 로직이 더 복잡해질 수 있습니다.
- 모든 프로미스를 기다리기 때문에, 실패 시 즉시 중단하는 `Promise.all()`과 달리 실패를 빠르게 감지하지 못합니다.
- 따라서 실패 시 바로 작업을 중단해야 하는 경우에는 적합하지 않습니다.
---
요약:
`Promise.allSettled()`는 여러 비동기 작업의 성공/실패 여부를 구분해 모두 완료될 때까지 기다리며, 각 결과를 확인할 수 있도록 도와주는 메서드입니다. 실패한 프로미스 때문에 전체가 중단되는 것을 원하지 않을 때 유용하게 사용됩니다.
작성자:
이은채 [비회원]
| 작성일자: 1년 전
2024-09-12 16:03:46
조회수: 201 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 201 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.