[typescript] Promise.all과 Promise.race의 차이점

자바스크립트의 Promise 객체는 비동기 작업을 다루는 데 유용한데, Promise.allPromise.race는 둘 다 여러 개의 프로미스를 다룰 때 유용하게 사용됩니다. 하지만 둘 간에는 몇 가지 중요한 차이점이 있습니다. 이번 글에서는 Promise.allPromise.race의 차이점을 알아보겠습니다.

Promise.all

Promise.all은 배열로 전달된 프로미스들이 모두 이행될 때까지 기다린 후 결과를 반환합니다. 만약 하나 이상의 프로미스가 거부된다면, Promise.all은 첫 번째 거부된 프로미스의 이유로 거부됩니다. 예시 코드는 아래와 같습니다.

const promises = [
  new Promise((resolve) => setTimeout(resolve, 1000, 'one')),
  new Promise((resolve) => setTimeout(resolve, 2000, 'two')),
  new Promise((resolve) => setTimeout(resolve, 3000, 'three'))
];

Promise.all(promises)
  .then((results) => {
    console.log(results); // ['one', 'two', 'three']
  })
  .catch((error) => {
    console.error(error); // 만약 하나 이상의 프로미스가 거부되었을 때의 처리
  });

Promise.race

Promise.race는 배열로 전달된 프로미스들 중 가장 먼저 이행 또는 거부된 프로미스의 결과를 반환합니다. 따라서 Promise.race는 가장 먼저 이행되는 프로미스의 결과를 반환하거나, 가장 먼저 거부되는 프로미스의 이유로 거부됩니다. 예시 코드는 아래와 같습니다.

const promises = [
  new Promise((resolve) => setTimeout(resolve, 1000, 'one')),
  new Promise((resolve, reject) => setTimeout(reject, 500, 'error')),
  new Promise((resolve) => setTimeout(resolve, 3000, 'three'))
];

Promise.race(promises)
  .then((result) => {
    console.log(result); // 'one'
  })
  .catch((error) => {
    console.error(error); // 만약 가장 먼저 거부된 프로미스가 있을 때의 처리
  });

결론

Promise.all은 모든 프로미스가 완료될 때까지 기다렸다가 모든 결과를 반환하고, Promise.race는 가장 먼저 완료된 프로미스의 결과를 반환합니다. 각각의 사용 용도에 맞게 적절히 활용하면 비동기 작업을 효과적으로 처리할 수 있습니다.

이상으로 Promise.allPromise.race의 차이점에 대해 알아보았습니다. 부족한 부분이 있다면 추가로 알려주시면 감사하겠습니다.