개발자
최근 회사에 입사해서 여러 코드를 보고 있는데 Promise.all과 Promise.allSettled를 많이 사용하고 있더라고요. 두 method가 구별되어서 사용되지는 않고 있는데 크게 문제는 없습니다. 검색해보니 Promise.all은 하나만 실패해도 결과를 얻을 수 없고, Promise.allSettled는 전부 결과를 얻을 수 있다고 하네요. 각각을 어떤기준을 가지고 현업에서 사용하는지 알고싶습니다.
답변 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을 내지않는다면 잘 발생하지 않기때문에 두 가지를 혼용해서 사용하는 경우가 많은데요. 에러처리와 데이터가 사용되는 역할에 따라서 해당 메서드들을 잘 사용하는 것도 개발자에게 필요한 역량이지 않을까 싶습니다! 화이팅!
익명
작성자
2023년 01월 30일
우와.... 엄청 상세하게 설명해 주셨네요..!!! 감사합니다 홍재님
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!