본문 바로가기
프로그래밍

JS : 비동기 처리 & 콜백 공부 II

by Youngbin Kwon 2020. 8. 24.

Promise (참고)

프로미스는 자바스크립트 비동기 처리에 사용되는 객체입니다. 어떤 함수를 실행할 때, 나중에 이어지는 메소드들을 실행하기로 약속(프로미스)하는 것으로 이해하면 될 것 같습니다.

 

new Promise(resolve, reject)를 통해 선언할 수 있으며, 선언된 결과에 맞는 resolve와 reject인자를 사용할 수 있습니다. 프로미스 객체는 세 개의 상태를 가지고 있는데, Pending(대기), Fulfilled(이행), Rejected(실패)로 나누어 집니다.

 

Pending, Fulfilled, Rejected

프로미스를 처음 선언하면, 해당 메서드는 대기 상태가 됩니다. 프로미스 메서드를 호출할 때, 콜백 함수를 선언할 수 있는데, 이 콜백 함수의 인자는 성공시(resolve), 실패시(rejected)로 나누어 선언할 수 있습니다.

 

콜백 함수의 인자 resolve를 실행할 경우, 이행 (fulfilled)상태가 되어, .then()을 사용하여 처리 결과값을 가져오거나 이후에 이어질 함수를 정의할 수 있습니다.

 

마찬가지로, 콜백 함수의 인자 reject를 통해 프로미스가 실패된 경우에는, 프로미스는 rejected 상태가 되며 then이 아닌 catch()를 사용하여 에러를 핸들링할 수 있습니다.

 

예제

const getData = () => {
	return new Promise = (resolve, reject) => {
  		$.get('url/products/1', function(response) {
        	if (response) {
            	resolve(response);
            }
            reject(new Error('error'));
        }
    };
};

getData.then(function(data) { //성공일 경우 response값 출력)
	console.log(data);
}).catch(function(err){ //실패일 경우 error값 출력
	console.error(err);
});

 

Promise Chaining

프로미스는 여러 개의 프로미스를 연결하여 사용할 수 있다는 특징이 있습니다. 첫 프로미스에서 리턴된 값으로 then을 수행하고, 여기서 리턴된 값으로 그 다음 .then을 실행합니다.

new Promise(function(resolve, reject){
  setTimeout(function() {
    resolve(1);
  }, 2000);
})
.then(function(result) {
  console.log(result); // 1
  return result + 10;
})
.then(function(result) {
  console.log(result); // 11
  return result + 20;
})
.then(function(result) {
  console.log(result); // 31
});

 

Promise.all()

여러 개의 프로미스를 한 번에 실행하고, 결과값을 배열 형태로 리턴합니다.

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]

다음 게시물에서는 또다른 비동기 처리 방법인 Async & await을 살펴 보도록 하겠습니다.

'프로그래밍' 카테고리의 다른 글

wecode +7 (8/24)  (0) 2020.08.25
wecode +6 (8/23)  (0) 2020.08.24
JS : 비동기 처리 & 콜백 공부 I  (0) 2020.08.24
wecode +5 (8/22)  (0) 2020.08.22
JS : Event, AJAX, JSON  (0) 2020.08.22

댓글