오늘 Promise
와 for await loop
를 이용해서 요청을 보내는 코드를 Promise.all()
로 변환하는 작업을 진행하려고 했다.
하지만, Promise.all()
으로 작성하면 모든 Promise
가 fulfilled 된 이후, 모든 Promise
의 반환 값을 배열에 넣어서 반환한다. 그렇다는 것은 요청을 보낸 Promise
중 하나라도 reject가 호출된다면 reject를 호출하고 가장 먼저 reject된 결과를 반환한다.
그러면 for await loop
와 다른 동작을 하는 것이다.
이를 해결 하기 위해 서칭을 하다가 Promise.allSettled()
를 발견했다.
Promise.all()
과 매우 유사해 보이지만, 배열로 받은 모든 Promise
가 fulfilled되거나 reject가 되거나 상관없이 완료가 pending 상태가 끝나면 모든 Promise를 배열로 리턴한다.
반환되는 결과같은 배열안에 다음과 같은 객체형태가 들어있다.
참고자료
엘레베이터에 낀 남자 - promise.all / promise.allSettled 차이{ status: "fulfilled" | "rejected"; value? : any; reason? : any; }
status가 fulfilled면 value, rejected면 reason이 존재한다.
Promise.allSettled()
와 Promise.all()
은 비슷한듯 보이지만, 쓰임세는 확연히 다르므로 차이를 구별해서 사용해야한다.