Develope/Javascript

[Javascript]Promise.allSettled 사용법

oper0116 2020. 6. 26. 23:38
반응형

Promise.all vs Promise.allSettled

기존의 Promise.all과 병렬적으로 Promise를 처리할 수 있다는 공통점을 가지고 있습니다.
그러나 Promise.all을 통하여 실행시 Promiseresolve 상태에서만 값(value)을 반환하지만, Promise.allSettled을 사용시에는 값(value)resolve rejected와 같은 상태(status)를 객체형식으로 반환하게 됩니다.

Promise.all([Promise.resolve(1), Promise.resolve(2)])
  .then(console.log);   //  [1, 2]

Promise.allSettled([Promise.resolve(1), Promise.resolve(2)])
  .then(console.log);   //  [{status: "fulfilled", value: 1}, {status: "fulfilled", value: 2}]

또한 여러개의 Promise 중 하나라도 실패하게 된다면 Promise.allcatch로 이동되어 처리되지만, Promise.allSettled상태(status)이유(reason) 값을 가진 객체를 반환합니다.

Promise.all([Promise.reject(1), Promise.resolve(2)])
  .catch((err) => {
    console.log('err', err);    // err 1
  });

Promise.allSettled([Promise.reject(1), Promise.resolve(2)])
  .then(console.log);   // [{status: "rejected", reason: 1}, {status: "fulfilled", value: 2}]

Promise.allSettled를 사용하게 되면 어떠한 Promise가 실패하더라도 모든 Promise의 값을 반환하기 때문에 Promise.all과 다르게 사용이 가능합니다.

Promise.allSetttled ES2020에서 추가되었으며 또 다른 추가된 기능들을 확인하고자 한다면 여기에서 확인할 수 있습니다.

참고자료

https://stackoverflow.com/questions/59784175/differences-between-promise-all-and-promise-allsettled-in-js
https://github.com/tc39/proposal-promise-allSettled

반응형