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

콜백 지옥(callback hell)은 콜백 함수를 익명 함수로 전달하는 과정이 반복되어 코드의 들여쓰기 수준이 감당하기 힘들정도로 깊어지는 현상을 얘기한다. 주로 이벤트 처리나 서버 통신과 같은 비동기적인 작업을 수행하기 위해 이런 형태가 자주 등장하는데, 가독성이 떨어지면서 코드를 수정하기 어렵다.
func1(function (value1) {
func2(value1, function (value2) {
func3(value2, function (value3) {
func4(value3, function (value4) {
func5(value4, function (value5) {
// ...
});
});
});
});
});
콜백 함수 예시
예시 1
비동기로 거듭 제곱 함수를 사용한 콜백 지옥이다.
// 비동기(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 출력
});
});
});
});
콜백 지옥 탈출 방법
1. 기명 함수 사용하기
2. Promise 객체 사용하기
3. Async~await 사용하기
위와 같은 수평적인 형태의 코드를 Promise를 사용하면 수직적으로 보기 간편하게 바꿀 수 있다.
func1(value1)
.then(func2)
.then(func3)
.then(func4)
.then(func5, value5 => {
// ...
}
참고
Last updated
Was this helpful?