관리 메뉴

웹개발 블로그

[JS] 비동기 작업 처리하기1 - 콜백함수 사용하여 처리 본문

◆React.js & Next.js & Node.js/JavaScript

[JS] 비동기 작업 처리하기1 - 콜백함수 사용하여 처리

쿠키린 2025. 1. 21. 01:37

 

callback함수를 통해 바깥에서도 내부에 선언한 변수 사용가능하다.

[예시1]

3초뒤 sum 값 출력

 

add함수가 실행되면서, 

내부에 있는 비동기함수가 실행된다.

3초뒤  sum이 계산되고 인자값으로 sum을 주게되고 callback 함수가 실행된다.(비동기 결과값을 외부에서 사용가능)

function add(a,b, callback) { //callback함수를 통해 비동기함수의 결과값을 외부에서 사용가능하다.
    setTimeout(() => { const sum = a+b; 
                      callback(sum);
                     }, 3000);
}

add(1, 2 , (value) => {console.log(value);});

//(3초 뒤) 3

 

[예시2]

음식을 주문하는 상황

 

3초뒤 음식이 도착한다는 가정,

음식을 받은 뒤 2초뒤에 식은 음식을 출력한다.

1.5초뒤에는 냉동 음식을 출력한다.

 

여기서 비동기 작업의 결과를 또 다른 비동기 작업의 인수로 전달이 가능하다.

//주문 함수
function orderFood(callback) {
    setTimeout(() => {
        const food = "떡볶이";
        callback(food);//💥호출,비동기 결과값을 또다른 비동기 인수로 전달
    },3000);
}

//식은 함수
function cooldownFood(food, callback) {
    setTimeout(()=> {
        const cooldownedFood = `식은 ${food}`;
        callback(cooldownedFood);//💥호출,비동기 결과값을 또다른 비동기 인수로 전달
    }, 2000);
}

//냉동 함수
function freezeFood(food, callback){
    setTimeout(()=> {
            const freezedFood =`냉동 ${food}`;
        callback(freezedFood);//💥호출,비동기 결과값을 또다른 비동기 인수로 전달
    }, 1500);
}


//호출
orderFood((food) => {
    console.log(food);//(출력)떡볶이
	
 
    //callback함수 선언
    cooldownFood(food, (cooldownedFood) => {//food ,비동기 작업의 결과를 또다른 비동기 작업의 인수로 전달
        console.log(cooldownedFood);//(출력)식은 떡볶이
        
           //callback함수 선언
        freezeFood(cooldownedFood, (freezedFood) => {//cooldownedFood ,비동기 작업의 결과를 또다른 비동기 작업의 인수로 전달
        	console.log(freezedFood);//(출력)냉동 떡볶이
        });
        
    });
});

 

💥하지만 이런 방식 보다는 

더 나은 방식이 있다( 들여쓰기가 많아지면서 가독성이 떨어진다.)

이런 문제를 콜백지옥이라 부르는데...

 

방법이 없을까? 


 

이 다음 시간에 

'프로미스' 포스팅을 작성하겠습니다.