본문 바로가기
개발/javascript

[javascript] Promise란?

by 방구쟁이 2021. 7. 12.
728x90

Promise 예제 포스팅을 읽기 전 다음 포스팅 : javascript 비동기란? 을 참고하자

 

Promise란?

Promise는 자바스크립트 비동기 처리에 사용되는 객체로 주로 서버에서 받아온 데이터를 화면에 표시할 때 사용한다. 일반적으로 웹 애플리케이션을 구현할 때 서버에서 데이터를 요청하고 받아오기 위해 API를 사용합니다. 이때 데이터를 아직 받아오지 못했는데 화면에 데이터를 표시하려고 할때 발생하는 오류를 해결하기 위한 방법 중 하나이다.

 

Promise 사용법(예제)

function getSomeData(){
    return new Promise(function(resolve, reject){   //데이터를 받으면 resolve 호출 / 실패 시 reject
        resolve(result);                            //가져온 데이터 : result
    }); 
}

getSomeData().then(function(resultData){            //resolve의 결과값이 resultData로 전달
    console.log(resultData);
});

 

쉽게 new Promise()로 생성, resolve()는 결과값, then()은 Promise 실행이 완료된 후 실행을 의미한다

 

Promise's states

  • 대기(Pending)
  • 이행(Fulfilled)
  • 실패(Rejected)

대기(Pending)는 new Promise()까지 했을때이다.

이행(Fulfilled)은 resolve();까지하여 결과를 받았을 때라고 생각한다. 이행 상태가 되면 then() 처리로 결과값을 사용 가능하다.

실패(Rejected)는 reject()를 사용하여 실패 상태로 만들었을 때이다.

 

Promise 에러 처리

Promise의 에러를 처리하는 방법은 then()을 두 번쓰거나 catch()를 이용하여 reject() 메서드가 호출되어 실패 상태가 된 경우입니다. 가급적 catch를 사용해야 한다. 이유는 then으로 처리하려면 콜백 함수 내부에서 나는 오류를 잡아낼 수 없기 떄문이다.

getSomeData().then(function(resultData){
    console.log(resultData);
}).catch(function(err){
    console.log('error : ', err);
});

 

Promise.all이란?

쉽게 예를 들면, 동시에 API에 접속해 데이터를 가져와 resolve로 반환해주는 것으로 생각한다. Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환합니다.

 

왜 사용할까?

그림을 보며 이해해보자.

사용 전(빨간 부분)

 

위 그림과 같이 사용 전은 위에 API를 불러온 뒤 다음에 처리한다.

사용 후

 

 위 그림은 사용 후 API를 동시에 불러오는 작업을 진행한다.

Promise.all 예제

Promise.all([p1, p2, p3]).then((values) => {
  console.log(values);
});

 

오늘 성장에 도움을 주신 개발자분

참고자료 : https://joshua1988.github.io/web-development/javascript/promise-for-beginners/

참고자료 2 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

감사합니다.

728x90

'개발 > javascript' 카테고리의 다른 글

ES5, ES6이란?  (0) 2021.08.20
stopPropagation 간단정리?  (0) 2021.08.05
[javascript] 비동기란?  (0) 2021.07.08
WebSocket (웹소켓이란?)  (0) 2021.07.07
Javascript Object태그란?  (0) 2021.07.03

댓글