[JavaScript] Promise Static Method

2021. 5. 12. 17:08Programming Languages/JavaScript

프로미스는 5가지 정적 메서드를 제공합니다.

Promise.resolve / Promise.reject

이미 존재하는 값을 프로미스 객체로 래핑하는 메서드입니다.

const resolved = Promise.resolved(resolve => resolve([1, 2, 3]);
resolved.then(console.log); // [1, 2, 3]

const rejected = Promise.rejected(new Error("에러 발생"));
rejected.catch(console.log); // "에러 발생!"

Promise.all

여러 프로미스들을 병렬적으로 처리할 때 사용하는 메서드입니다.

const req1 = () =>
  new Promise((resolve) => setTimeout(() => resolve(1), 3000));
const req2 = () =>
  new Promise((resolve) => setTimeout(() => resolve(2), 2000));
const req3 = () =>
  new Promise((resolve) => setTimeout(() => resolve(3), 1000));
  
Promise.all([req1(), req2(), req3()] 
  .then(console.log) // [1, 2, 3] 
  .catch(console.error);

이 메서드는 인자로 프로미스를 요소로 갖는 배열 등의 이터러블을 인수로 받습니다. 만약 요소가 프로미스가 아닌 경우 Promise.resolve 메서드로 래핑합니다.그리고 들어온 모든 비동기 요청이 끝나고 난 후 결과를 배열로 저장한 뒤 새로운 프로미스 객체로 반환합니다. 위 예시는 req1이 3초가 걸리므로 3초 후 fulfilled 상태가 될 때까지 기다린 후에 결과가 반환됩니다. 만약 하나라도 rejected 됐다면 즉시 종료되고 에러를 반환합니다.

Promise.race

여러 프로미스들 중 가장 먼저 fulfilled 또는 rejected 상태가 된 프로미스의 처리 결과를 반환하는 새로운 프로미스를 반환합니다.

Promise.race([
  new Promise((_, reject) => 
    setTimeout(() => reject(new Error('Error 1')), 500)),
  new Promise((resolve) => setTimeout(() => resolve(1), 1000))
])
  .then(console.log)
  .catch(console.error); // Error 1

Promise.allSettled

프로미스를 요소로 갖는 이터러블을 인수로 전달받습니다. 그리고 전달받은 프로미스가 모두 settled 상태(fulfilled 또는 rejected)가 되면 처리 결과를 배열로 반환합니다.

Promise.allSetteld([
  new Promise((_, reject) =>
    setTimeout(() => reject(new Error('Error 1')), 500)),
  new Promise((resolve) => setTimeout(() => resolve(1), 1000))
])
  .then(console.log); 
 /** 
  * [
  *   { status: "rejected", reason: Error: Error 1 },  
  *   { status: "fulfilled", value: 1 }  
  * ] 
 /*
  • 상태가 fulfilled라면 값은 value 프로퍼티에 담깁니다.
  • 상태가 rejected라면 에러는 reason 프로퍼티에 담깁니다.

'Programming Languages > JavaScript' 카테고리의 다른 글

[JavaScript] Promise Error Handling  (0) 2021.05.12
[JavaScript] Promise  (0) 2021.05.12
[JavaScript] 가비지 컬렉션  (0) 2020.08.17
[JavaScript] 객체 복사  (0) 2020.08.12
[JavaScript] 객체  (0) 2020.08.11