## Promise.allSettled
[Promise.allSettled() - JavaScript \| MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled)
- 여러 개의 Promise를 병렬로 실행하고, 성공여부와 관계없이 모든 Promise가 완료되었을 때 결과 배열을 반환하는 메서드
- 각 결과는 `{ status: "fulfilled" | "rejected", value | reason }` 형식
## 활용 예시
[[Promise.all]]와 비슷하게 비동기 작업 간 의존성이 없을 때 병렬로 실행하려는 경우에 사용할 수 있다. [[Promise.all]]과 달리 모든 Promise의 성공/실패를 반환하기 때문에
- 일부 실패를 허용할 때
- 개별 성공/실패 결과를 각각 처리할 때
- 일부 작업의 실패로 인해서 전체 작업이 중단되면 안될 때
유용하게 사용할 수 있다.
- 배치 작업 처리 (전체 중단 방지)
```javascript
// 여러 사용자에게 이메일을 보내는 경우. 일부 실패해도 계속 진행한다.
const emailResults = await Promise.allSettled(
users.map((user) => sendEmail(user.email, message))
);
const { successCount, failCount } = emailResults.reduce(
(acc, result) => {
if (result.status === "fulfilled") acc.successCount++
else acc.failCount++
return acc
},
{ successCount: 0, failCount: 0 },
)
console.log(`이메일 발송: 성공${successCount}건, 실패 ${failCount}건`)
```
- 여러 검증 작업 (개별 결과 필요)
```javascript
// 검증 결과를 개별 메시지로 보여줄 때
const validationResults = await Promise.allSettled([
validateName(name),
validateEmail(email)
]);
validationResults.forEach((result) => {
if (result.status === "rejected") {
alert(result.reason)
}
})
```
## 관련 문서
- [[Promise.all]] - 모든 작업이 성공해야 결과를 반환하는 경우