개발자

Promise.all과 Promise.allSettled 차이

2023년 01월 27일조회 461

최근 회사에 입사해서 여러 코드를 보고 있는데 Promise.all과 Promise.allSettled를 많이 사용하고 있더라고요. 두 method가 구별되어서 사용되지는 않고 있는데 크게 문제는 없습니다. 검색해보니 Promise.all은 하나만 실패해도 결과를 얻을 수 없고, Promise.allSettled는 전부 결과를 얻을 수 있다고 하네요. 각각을 어떤기준을 가지고 현업에서 사용하는지 알고싶습니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

엄홍재님의 프로필 사진

Promise.all과 Promise.allSettled는 비슷하게 사용되지만 사용되는 방식은 다릅니다. 일단 두 메서드의 공통점이 있습니다. 먼저 동시에 Promise들을 처리할 수 있습니다. 예를들어 API요청이라고 하면 각각의 결과를 얻기위해 다음처럼 순차적으로 요청하는 경우가 많습니다 const resultA = await requestA const resultB = await requestB const resultC = await requestC 하지만 Promise.all과 Promise.allSettled를 사용하면 세 가지를 동시에 요청하고 결과를 얻을 수 있습니다. 하지만 두 메서드의 차이점이 있습니다. 일단 결과의 형태에 차이가 있습니다. promise.all같은 경우 성공한 결과값을 배열형태로 가지고 있습니다. Promise.allSettled는 각각의 결과값도 물론 가지고 있고 요청한 status도 가지고 있습니다. 형태로 보면 promise.all은 [1, 2, 3]이고 Promise.allSettled는 [{ status: 'fulfilled', value: 1}, { status: 'fulfilled', value: 2}, { status: 'fulfilled', value: 3}] 이 됩니다. 결과값을 사용할때의 처리가 조금 달라지게 되겠죠? 그리고 큰 차이점 중 하나는 요청이 실패할 때 나타납니다. 모든 요청이 성공한다면 (reject가 없음) 모든 결과를 얻을 수 있지만 요청이 하나라도 실패한다면 두 메서드는 완전하게 달라집니다. Promise.all같은 경우는 1개만 reject가 되더라도 다른 요청의 결과와 관계없이 결과값은 reject입니다. 하지만 Promise.allSettled는 각각의 요청이 fulfilled인지 rejected인지 나오게 됩니다. 각각의 fulfilled/rejected에 따라 데이터를 처리할 수 있습니다. 그래서 Promise.all은 서로 의존성이 있는 데이터를 가져올 때 사용합니다. API를 요청해서 여러 데이터를 조합해야할 때 1개만 실패해도 사용자에게 보여 줄 수 없을 때 사용합니다. 반대로 Promise.allSettled는 feature가 다를 때 주로 사용하는 것 같습니다. A,B,C의 데이터를 가져왔을 때 데이터가 일부 없어도 각각 사용할 수 있다면 사용합니다. 사실 개발하다보면 에러처리를 많이 생각하지 않을때가 있습니다. 로컬에서 사용하는 API는 항상 success고 억지로 request fail을 내지않는다면 잘 발생하지 않기때문에 두 가지를 혼용해서 사용하는 경우가 많은데요. 에러처리와 데이터가 사용되는 역할에 따라서 해당 메서드들을 잘 사용하는 것도 개발자에게 필요한 역량이지 않을까 싶습니다! 화이팅!

profile picture

익명

작성자

2023년 01월 30일

우와.... 엄청 상세하게 설명해 주셨네요..!!! 감사합니다 홍재님

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!