Promise 메소드들...
FE BE 개발 메모장/Javascript

Promise 메소드들...

Promise 메소드

Promise.all()

Promise.all()은 요소 전체가 프로미스인 배열을 받고 새로운 프로미스를 반환한다. 모든 프로미스가 이행될 때 까지 기다렸다가 그 결과값을 담은 배열을 반환하지만, 주어진 프로미스중 하나라도 실패하면, Promise.all이 거부되고, 이행된 결과는 무시한다.

let promise = Promise.all([....promises...])

Promise.allSettled()

최근에 추가된 메소드로, 모든 프로미스가 처리될 때까지 기다렸다가 그 결과(객체)를 담은 배열을 반환한다.

let urls = [
  'https://api.github.com/users/iliakan',
  'https://api.github.com/users/remy',
  'https://no-such-url'
];

Promise.allSettled(urls.map(url => fetch(url)))
  .then(results => { // (*)
    results.forEach((result, num) => {
      if (result.status == "fulfilled") {
        alert(`${urls[num]}: ${result.value.status}`);
      }
      if (result.status == "rejected") {
        alert(`${urls[num]}: ${result.reason}`);
      }
    });
  });

 

fetch를 사용해 여러 사람의 정보를 가져오고 있다고 가정한다면, 여러 요청 중 하나가 실패해도 다른 요청 결과는 여전히 있어야한다. 이럴때 Promise.allSettled를 사용할 수 있다.

  • 응답이 성공할 경우: {status: "fulfilled", value: result}
  • 응답이 실패할 경우: {status: "rejected", value: error}

위의 코드의 result는 이렇게 담긴다.

[
  {status: "fulfilled", value: ....응답},
  {status: "fulfilled", value: ...응답},
  {status: "rejected", reasone: ...에러 객체},
]

 

Promise.race()

Promise.all과 비슷하지만, 가장먼저 처리된 프로미스의 결과 또는 에러를 담은 프로미스를 반환한다.

let promise = Promise.race([iterable]);

Promise.resolve/reject (async/await 문법이 생긴 뒤로 잘 사용되지 않는다.)

.resolve()는 결과 값이 value인 이행 상태 프로미스를 생성한다.

//이 코드와 동일한 일을 수행한다.
let promise = new Promise(resolve => resolve(value)); 


Promise.resolve(data)

 

Promise.prototype.Methods

.then() (Promise.prototype.then())

then메소드는 프로미스를 리턴하고 두개의 콜백함수를 인수로 받는다. 하나는 프로미스가 이행(fulfilled)했을 때, 다른 하나는 거부했을 때를 위한 콜백함수이다.

const promiseA = new Promise((resolve, reject) => {
  resolve('Success!');
  
  //또는 reject("Error!!");
})

promiseA.then((data) => {
  console.log(data);
})
.catch((err) =>{
  consoel.log(err);
})

.catch() (Promise.prototype.catch())

 

'FE BE 개발 메모장 > Javascript' 카테고리의 다른 글

ES-6 문법 정리  (0) 2021.02.10
구조 분해 할당  (0) 2021.02.08
JSON에 대하여  (0) 2021.02.03
async & await  (0) 2021.02.02
Promise  (0) 2021.02.01