Node.js

Promise.allSettled()과 Promise.all()

안모 2023. 8. 20. 22:41

Promise.allSettled()

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

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

Promise.allSettled()의 반환 값

  • fulfilled: 비동기 작업이 이행 되었다.
    • value: 비동기 작업의 이행을 통해 얻은 값.
  • rejected: 비동기 작업이 거부 되었다.
    • reason: 비동기 작업이 거부된 이유.
  • 빈 배열 반환: 빈 이터러블 객체를 인자로 받았을 때.

Promise.all()

Promise.all()는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환한다. 

결과로 반환하는 프로미스는 인자의 모든 프로미스가 이행하거나 어떤 프로미스가 거부할 때 (호출 스택이 비는 즉시) 비동기적으로 이행 또는 거부한다. 



여러 프로미스의 결과를 집계할 때, 일반적으로 다음 코드를 실행하기 전에 서로 연관된 비동기 작업 여러 개가 모두 이행되어야 하는 경우에 사용한다.

Promise.all()의 반환 값

  • 주어진 프로미스가 전부 이행되었을 경우, 반환 값은 매개변수로 주어진 프로미스의 순서와 일치하며, 완료 순서에 영향을 받지 않는다.

  • 주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부한다.

  • 객체에 프로미스가 없으면, 비동기적으로 이행하는 Promise를 반환하고, Google Chrome 58 환경에서는 이미 이행한 프로미스를 반환한다.

Promise.all() 실패 우선성

Promise.all()은 배열 내 요소 중 어느 하나라도 거부하면 즉시 거부한다.

예를 들어, 일정 시간이 지난 이후 이행하는 네 개의 프로미스와, 즉시 거부하는 하나의 프로미스를 전달한다면 Promise.all()는 즉시 거부한다.