본문 바로가기

자바스크립트

JavaScript 비동기(2) - 콜백

 

 

 

 

콜백 활용

function timer(callback) {
    setTimeout(()=>{
        console.log(1)
        callback() // 받아온 callback함수를 여기서 실행
    },2000)
}

timer(()=>{
    console.log('Hello World')
})

timer(()=>{
    console.log('안녕하세요')
})

timer(()=>{
    console.log('[ERROR] 403 Forbidden')
})

   - 비동기 작업 도중에 콜백 함수를 사용할 수 있습니다.

   - callback 매개변수로 다른 함수를 받아와서 비동기함수 내 원하는 부분에서 실행시킬 수 있습니다.

   - 특정한 비동기 함수 틀에 여러가지 바리에이션을 적용할 수 있습니다.

 

 

 

 

콜백 지옥

function timer(callback) {
    const ImgEl = document.createElement('img')
    imgEl.src = 'Img 링크'
    imgEl.addEventListener('load', ()=>{
    	callback() // 받아온 callback함수를 여기서 실행
    }
}

// 순서가 일정하지 않습니다.
timer(()=>{
    console.log('timer1')
})
timer(()=>{
    console.log('timer2')
})

timer(()=>{
    console.log('timer3')
})


// timer1 timer2 timer3 순서로 출력됩니다.
timer(()=>{
    console.log('timer1')
    timer(()=>{
        console.log('timer2')
        timer(()=>{
            console.log('timer3')
        })
    })
})

   - 여러 비동기 함수를 사용하면 도착하는 순서가 일정하지 않아 순서가 뒤죽박죽으로 꼬이게 됩니다.

   - 이때문에 순서를 맞추기 위해 콜백 안에 함수를 넣어 동기적으로 만들 수 있습니다.

   - 다만, 들여쓰기를 통해 콜백 - 콜백 - 콜백 - ... 이 반복되는데, 이를 콜백지옥이라 합니다.

   - 과도한 콜백 지옥은 가독성과 유지보수성을 떨어뜨리게 되므로 가급적 지양하는것이 좋습니다.

   - 콜백지옥을 해결하기 위해 Promise를 사용할 수 있습니다.

'자바스크립트' 카테고리의 다른 글

JavaScript 비동기(1) - 개요  (0) 2024.04.27
JavaScript 클래스  (0) 2024.04.26
JavaScript 모듈  (0) 2024.04.26
JavaScript - 선택적 체이닝(Optional chaining)  (0) 2024.04.25
JavaScript 구조 분해 할당  (0) 2024.04.23