-
Javascript - PromiseJavascript 2020. 9. 6. 16:27
callback 함수 사용해서 어떤 작업 이후에 다른 작업 실행하게 했음
하지만 작업이 많아지게 되면 코드가 복잡해졌음
==> Promise 사용
1초마다 1씩 더해지는 알고리즘
function increaseAndPring(n, callback){ setTimeout(() => { const increased = n + 1; console.log(increased); if(callback){ callback(increased); } }, 1000); } increaseAndPrint(0, n => { increaseAndPrint(n, n => { increaseAndPrint(n, n => { increaseAndPrint(n, n => { increaseAndPrint(n, n => { console.log('작업 끝!'); }); }); }); }); });
-- 콜백 지옥
Promise 사용해서 간편하게 사용
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { // resolve('result'); // 성공했을 때 reject(new Error()); // 실패하는 상황에서 사용 }, 1000) }); /* myPromise.then(result => { console.log(result); }) */ myPromise.then(result => { console.log(result); }).catch(e => { console.error(e); })
promise 는 성공할 수도, 실패할 수도 있다.
성공하면 resolve로, 실패하면 reject 로 실행
promise를 만드는 함수 작성
// n이 5가 되면 에러가 나오는 함수 function increaseAndPring(n) { return new Promise((resolve, reject) => { setTimeout(() => { const value = n + 1; if(value === 5) { const error = new Error(); error.name = 'ValueIsFiveError'; // 에러의 이름 설정 reject(error); return; } console.log(value); resolve(value); }, 1000); }); } // 함수 사용 increaseAndPrint(0).then(n => { // console.log('result: ', n); return increaseAndPrint(n); }).then(n => { return increaseAndPrint(n); }).then(n => { return increaseAndPrint(n); }).then(n => { return increaseAndPrint(n); }).then(n => { return increaseAndPrint(n); }).catch(e => { console.error(e); }); increaseAndPrint(0).then(increaseAndPrint) .then(increaseAndPrint) .then(increaseAndPrint) .then(increaseAndPrint) .then(increaseAndPrint) .catch(e => { console.error(e); });
==> 연속적으로 같은 함수를 실행하기에는 매우 편하다.
하지만 다른 작업을 같이 실행하거나, 중간에 다른 값을 주는 상황 등에서는 사용하기 쉽지않다.
그래서 사용하는 것이 async / await
'Javascript' 카테고리의 다른 글
Javascript - Promise all, Promise.race (0) 2020.09.06 Javascript - async / await (0) 2020.09.06 Javascript - 비동기 처리 (0) 2020.09.06 Javascript - Hoisting (0) 2020.09.05 Javascript - scope (0) 2020.09.05