The Web Developer 부트캠프 2022

JS 콜백(callback) 지옥

거위발바닥 2022. 9. 25. 15:26

콜백

 

const fakeRequestCallback = (url, success, failure) => {
    const delay = Math.floor(Math.random() * 4500) + 500;
    setTimeout(() => {
        if (delay > 4000) {
            failure('Connection Timeout :(')
        } else {
            success(`Here is your fake data from ${url}`)
        }
    }, delay)
}

// delay가 4000 이상이면 failure해서 Connection Timeout, 
// 아니면 success해서 url을 불러온다.

success가 첫번째 콜백, failure가 두번째 콜백

const fakeRequestCallback = (url, success, failure) => {
    const delay = Math.floor(Math.random() * 4500) + 500;
    setTimeout(() => {
        if (delay > 4000) {
            failure('Connection Timeout :(')
        } else {
            success(`Here is your fake data from ${url}`)
        }
    }, delay)
}

fakeRequestCallback('books.com', function (response) {
    console.log("IT WORKED!!")
    console.log(response)
}, function (error) {
    console.log("ERROR!", error)
})

난수값으로 인해서 delay가 4000 이상이면 fuakeRequestCallback 함수의 첫번째 콜백인 

console.log("IT WORKED!!") 와 response 값을 console.log 한다. 여기서 response 값은success(`Here is your fake data from ${url}`) 의 `Here is your fake data from ${url}` 이다. 여기서 단순히 books.com이 아닌 다른 페이지가 보고 싶다면 bookes.com/page1.... 를 콜백해야한다.

fakeRequestCallback('books.com', function (response) {
    console.log("IT WORKED!!")
    console.log(response)
    fakeRequestCallback('books.com/page2', function (response) {
        console.log("IT WORKED 2!!!")
        console.log(response)
    },
        function (error) {
            console.log("ERROR 2 !!!")
        })
}, function (error) {
    console.log("ERROR!", error)
})

굉장히 보기 어렵다. 이것을 해결하기 위해 있는 것이 Promise다 .

'The Web Developer 부트캠프 2022' 카테고리의 다른 글

JS Promise 만들기  (1) 2022.09.25
JS Promise  (2) 2022.09.25
기술 콜스택, WebApi와 단일스레드, 콜백  (1) 2022.09.25
JS 이벤트 위임  (1) 2022.09.23
JS 이벤트 버블링  (0) 2022.09.23