## 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]] - 모든 작업이 성공해야 결과를 반환하는 경우