본문 바로가기
Javascript

Javascript - Promise

by DGK 2021. 10. 1.

 

인프런 자바스크립트 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

Promise

 

  • Promise 란?
Promise는 자바스크립트의 비동기 처리로 발생하는 문제에 사용되는 객체이다.

<기본 개념>
var x = 1;


//서버로부터 데이터를 받아오는 code(ex : y = callServerData();)
      
      
var z = x + y;


//만약 서버로부터 데이터를 받아오는데 시간이 지연되는 경우,
//자바스크립트는 비동기 처리의 특성으로 인해 y값을 서버로부터 얻지 못한 채, 
//var z = x + y; 코드를 해석한다.

//이 경우에 y에 어떠한 값도 할당되지 않아 에러가 발생한다.

//이러한 문제를 방지하기 위해 서버로부터 데이터를 받고 난 후에, 
//그 다음 코드를 자바스크립트가 해석하도록 만드는 기능을 Promise라고 한다.


<활용 예시>

//Promise 기능을 사용하지 않는 경우

<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
</head>
<body>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  <script>
//mock Server 사용
//axios 오픈소스 라이브러리 사용(클라이언트와 서버간의 데이터 통신을 도와주는 라이브러리)


  var url = "https://f65825be-630b-4e6b-8528-00de15d3e1bd.mock.pstmn.io/list";
  var data = axios.get(url).then(function(response){
  console.log(response.data);
  return response.data;
  });

  //axios 라이브러리를 통해 data를 받아오는 code

  var total = 0;
  for(var Tage of data){
  total += Tage.age;
  }

  console.log(total);		// 결과 : 에러 발생


  //에러 발생의 이유는 서버로부터 데이터를 받아오는데 시간이 걸리기 때문에,
  //해당 url로부터 데이터를 요청한 후에(아직 데이터 받아오지 못한 상태)
  //그 다음 코드를 실행하기 때문이다.(자바스크립트의 비동기 처리 특성)

  //이 경우, data에는 어떠한 값도 없기 때문에 에러가 발생하는 것이다.

  //이러한 문제를 방지하고자 Promise 기능을 사용한다.
  //(데이터를 모두 받기 전까지 그 다음의 코드 실행을 보류함)

  </script>
</body>
</html>



//Promise 기능을 사용하는 경우

<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
</head>
<body>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  <script>
               
  var url = "https://f65825be-630b-4e6b-8528-00de15d3e1bd.mock.pstmn.io/list";
        
  function getData(){		//Promise 사용
  
  return new Promise(function(resolve, reject){   
  axios.get(url).then(function(response){
  console.log(response.data);
  resolve(response.data);
  });
  });

  }


  //여기서 Promise의 parameter는 resolve와 reject가 있으며,
  //resolve는 정상적으로 처리된 결과를 리턴해주는 parameter이고,
  //reject는 에러가 발생한 경우 Promise 기능을 중단시켜주는 parameter이다.


  var total = 0;

  getData().then(function(data){
  
  //정상적으로 서버로부터 데이터를 받아오면, resolve로 리턴된 값이 data로 들어온다.
  
  for(var Tage of data){
  total += Tage.age;
  }
  console.log(total);		// 결과 : 에러 발생X
  
  });


  </script>
</body>
</html>

'Javascript' 카테고리의 다른 글

Javascript - 모듈(Module)  (0) 2021.10.01
Javascript - Async/Await  (0) 2021.10.01
Javascript - Array Destructuring  (0) 2021.09.30
Javascript - Object Destructuring  (0) 2021.09.30
Javascript - Spread Operator  (0) 2021.09.30

댓글