Javascript 콜백 함수 및 약속

콜백 함수는 거의 비슷한 스타일과 목적으로 많은 프로그래밍 언어에 알려져 있습니다.

콜백 함수란?



간단히 말해서 다른 함수에 인수로 전달되는 함수는 콜백 함수입니다.

왜 필요한가요?



이 콜백 함수의 특별한 점은 무엇인지 궁금하실 것입니다. 다른 함수 내부에서 이미 한 함수를 호출할 수는 없었습니까?

답을 얻기 위해 이 두 가지 유형의 네트워크 호출을 살펴보겠습니다.
  • 동기화
  • 비동기식



  • 동기화 대 비동기 호출





    콜백 함수는 특히 비동기 응답을 처리하는 데 사용됩니다.




    콜백 지옥



    Anything that can go wrong will go wrong. - Murphy's I Law



    콜백 지옥은 일이 잘 되도록 의도적으로 또는 의도하지 않게 만들 수 있는 상황으로, 결과가 거의 없을 수 있습니다.

    중첩 트리setTimeout() 기능을 고려하십시오. 프로그래밍 세계에서 중첩은 악명 높고 악명 높습니다.
    이유 - 음, 그들은 코드를 읽을 수 없고, 복잡하고, 손상되기 쉽게 만듭니다.



    약속



    JavaScript의 Promise는 문자 그대로의 의미와 비슷합니다. 약속이 더 깨끗하고 관리하기 쉽다는 콜백 함수와 유사하게 훨씬 앞서 비동기 작업을 위한 핸들러를 연결할 수 있는 개체입니다.
    네, 약속으로 콜백 지옥을 피할 수 있습니다.

    Promise는 다음 상태 중 하나일 수 있습니다.
  • 보류 중 - 초기/기본 상태
  • fulfilled - resolve()를 사용하여 약속이 해결되었습니다.
  • 거부됨 - reject()를 사용하여 약속이 거부되었습니다.



  • 이제 간단한 약속을 만들어 봅시다.

    const promise = new Promise((resolve, reject) => {
        if(res) {
            resolve('resolved')
        } else {
            reject('reject')
        }
    })
    
    promise.then(function(){
    // On Successful response
    // do whatever you feel like
    
    })
    


    이 예에서는 constructor 로 인스턴스화하여 약속 객체를 만듭니다.
    생성자는 resolvedrejected 약속에 대한 핸들러가 있는 콜백 함수를 받습니다.

    Promise가 해결되거나 거부된 후 발생하는 일은 then()에 의해 결정됩니다.


    약속 사슬



    API 호출로 작업할 때 응답을 받은 후 일반적으로 다른 호출을 수행하려고 합니다.
    따라서 하나then()를 차례로 추가하여 약속 체인을 만들어야 합니다.

    해결된 모든 약속은 resolve handlers에서 처리하고 거부된 약속은 reject handlers에서 처리한다는 점을 기억하십시오.

    이 코드를 확인하고

    function promise() {
        const jobPromise = new Promise((resolve, reject) => {
            let selected = true; 
    
            setTimeout(() => {
                if (selected) {
                    resolve('Passed Interview');
                } else {
                    reject('Failed Interview');
                }
            }, 1000);
    
        })
    
        return jobPromise
    }
    
    promise()
        .then(decision, jobSearch)
        .then(joining, negotiate)
    
    function decision(param){
        console.log(param)
        let accept = true;
        return new Promise ((resolve, reject) => {
            if (accept) {
                resolve('accept offer')
            } else {
                reject('reject offer')
            } 
    
        });
    
    }
    
    function jobSearch (outcome) {
        console.log(outcome)
        console.log('Back to Job Search')
        return new Promise((resolve, reject) => { reject() })
    }
    
    function negotiate () {
        console.log('negotiation starts..... ')
    }
    function joining (decision) {
        console.log('Revert to the Company', decision);
        console.log('Joining Company')
    }
    


    무엇이 잘못될 수 있습니까?



    약속을 부적절하게 처리하면 오류가 쉽게 눈에 띄지 않고 지나갈 수 있습니다.
    then() 내의 콜백 핸들러에서 약속을 반환하거나 오류를 발생시키십시오. 그렇지 않으면 체인의 다음 해결 핸들러가 호출되며 우리는 그것을 원하지 않습니다.

    좋은 웹페이지 즐겨찾기