콜백 지옥 탈출 하기
콜백 지옥이란?

콜백 함수 예시
예시 1
콜백 지옥 탈출 방법
1. 기명 함수 사용하기
2. Promise 객체 사용하기
3. Async~await 사용하기
Last updated

Last updated
func1(function (value1) {
func2(value1, function (value2) {
func3(value2, function (value3) {
func4(value3, function (value4) {
func5(value4, function (value5) {
// ...
});
});
});
});
});// 비동기(Async) 프로그래밍: 거듭 제곱 함수
function exponentiationAsync(x, n, cb) {
n = n || 2;
var o = [];
while(n--) { o.push(x); }
x = o.reduce(function(a,b){return a*b;});
window.setTimeout((cb || function(){}), 1000, x);
}
// 2의 3승(거듭제곱) 값을 시작으로 1초 마다
// 전달 받은 값을 3승(거듭제곱)하여 비동기 처리
// 비동기 프로그래밍 코드 결과: 콜백 지옥!!!!
exponentiationAsync(2, 3, function(x){
exponentiationAsync(x, 3, function(x2){
exponentiationAsync(x2, 3, function(x3){
exponentiationAsync(x3, 3, function(x4){
console.log(x4); // 4초 뒤에 2.4178516392292583e+24 출력
});
});
});
});// Promise를 사용하여 exponentiationPromise 유틸리티 함수 개선
function exponentiationPromise(x, n=2, time=1000) {
return new Promise((resolve, reject) => {
window.setTimeout(() => {
try {
let o = Array.from(new Array(n), () => x);
resolve( o.reduce((a,b) => a*b) );
} catch(e) {
reject(e);
}
}, time);
});
}
// Promise를 사용한 비동기(Async) 프로그래밍
exponentiationPromise(2, 3)
.then(x => exponentiationPromise(x, 3))
.then(x2 => exponentiationPromise(x2, 3))
.then(x3 => exponentiationPromise(x3, 3))
.then(x4 => console.log(x4));
// 4초 뒤에 출력되는 결과 값: 2.4178516392292583e+24func1(value1)
.then(func2)
.then(func3)
.then(func4)
.then(func5, value5 => {
// ...
}