14.1.2 Promise
Promise는 콜백 지옥 같은 코드가 형성되지 않게 하는 방안으로 ES6에 도입된 기능입니다. 앞에서 본 코드를 Promise를 사용하여 구현해 볼까요? 다음 예제를 확인해 봅시다.
function increase(number) { const promise = new Promise((resolve, reject) => { // resolve는 성공, reject는 실패 setTimeout(() => { const result = number + 10; if (result > 50) { // 50보다 높으면 에러 발생시키기 const e = new Error('NumberTooBig'); return reject(e); } resolve(result); // number 값에 +10 후 성공 처리 }, 1000); }); return promise; } increase(0) .then(number => { // Promise에서 resolve된 값은 .then을 통해 받아 올 수 있음 console.log(number); return increase(number); // Promise를 리턴하면 }) .then(number => { // 또 .then으로 처리 가능 console.log(number); return increase(number); }) .then(number => { console.log(number); return increase(number); }) .then(number => { console.log(number); return increase(number); }) .then(number => { console.log(number); return increase(number); }) .catch(e => { // 도중에 에러가 발생한다면 .catch를 통해 알 수 있음 console.log(e); });
여러 작업을 연달아 처리한다고 해서 함수를 여러 번 감싸는 것이 아니라 .then을 사용하여 그다음 작업을 설정하기 때문에 콜백 지옥이 형성되지 않습니다.