프로그래밍/javacscript

Promise.all과 Promise.allSettled의 차이점

한코코 2022. 12. 6. 16:59

이런 코드를 발견했다.

await Promise.allSettled(SomthigPromiseList);

 

Promise는 비동기 처리를 할 수 있는 객체인건 알겠는데 Promise 속성을 사용하는건 처음 봤다.

내가 정리해두었던 Promise 개념 -> https://hancoco.tistory.com/72

 

[220127] promise, then, resolve

목록 1. promise의 목적 2. promise의 매개변수 2가지 3. then 사용법 4. promise의 상태 3가지 5. resolve 사용하는 법 promise를 사용하기 위한 선수지식 : 객체와 this 간단 정리! this에 관한 자세한 설명은 아래

hancoco.tistory.com

 

 

 

 


개념

Promise.all()

Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환합니다. 주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부합니다. (링크)

 

Promise.allSettled()

Promise.allSettled() 메서드는 주어진 모든 프로미스를 이행하거나 거부한 후, 각 프로미스에 대한 결과를 나타내는 객체 배열을 반환합니다.

일반적으로 서로의 성공 여부에 관련 없는 여러 비동기 작업을 수행해야 하거나, 항상 각 프로미스의 실행 결과를 알고 싶을 때 사용합니다.

그에 비해, Promise.all()이 반환한 프로미스는 서로 연관된 작업을 수행하거나, 하나라도 거부 당했을 때 즉시 거부하고 싶을 때 적합합니다. (링크)

 

 

 

실질적 코드

// 이런 전제가 주어졌을 경우,
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});


// 모두 성공해서 값을 모두 주거나,
// 하나라도 실패해서 rejected 값을 주거나.
Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]


// 중간에 실패를 해도 모든 값을 반환해준다
Promise.allSettled(promises)
  .then((results) => results.forEach((result) => console.log(result.status)));
// expected output:
// "fulfilled"
// "rejected"

 

 

 


Promise 상태(states) 3가지

promise는 생성하고 종료될때까지 처리과정을 promise states(프로미스의 상태)라고 표시하며 총 세가지로 나눌 수 있다.

  • pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
  • fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
  • rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태