Promise.allSettled()

김민찬·2021년 12월 21일
0

JavaScript

목록 보기
3/23
post-thumbnail

오늘 Promisefor await loop를 이용해서 요청을 보내는 코드를 Promise.all()로 변환하는 작업을 진행하려고 했다.

하지만, Promise.all()으로 작성하면 모든 Promisefulfilled 된 이후, 모든 Promise의 반환 값을 배열에 넣어서 반환한다. 그렇다는 것은 요청을 보낸 Promise중 하나라도 reject가 호출된다면 reject를 호출하고 가장 먼저 reject된 결과를 반환한다.

그러면 for await loop와 다른 동작을 하는 것이다.
이를 해결 하기 위해 서칭을 하다가 Promise.allSettled()를 발견했다.
Promise.all()과 매우 유사해 보이지만, 배열로 받은 모든 Promisefulfilled되거나 reject가 되거나 상관없이 완료가 pending 상태가 끝나면 모든 Promise를 배열로 리턴한다.

반환되는 결과같은 배열안에 다음과 같은 객체형태가 들어있다.

참고자료
엘레베이터에 낀 남자 - promise.all / promise.allSettled 차이

{
  status: "fulfilled" | "rejected";
  value? : any;
  reason? : any;
}

status가 fulfilled면 value, rejected면 reason이 존재한다.

Promise.allSettled()Promise.all()은 비슷한듯 보이지만, 쓰임세는 확연히 다르므로 차이를 구별해서 사용해야한다.

profile
두려움 없이

0개의 댓글