인프런 커뮤니티 질문&답변

kwon850550님의 프로필 이미지

작성한 질문수

Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념

자바스크립트 비동기 처리(2) - Promise

Call back함수와 Promise에 대한 비교

작성

·

226

1

앞시간에 비동기 처리때문에 call back 함수를 띄우듯이 Promise도 똑같이 console을 띄우는 예제가 없어서 직접사용했는데 이렇게 쓰는게 맞을까 싶어서요

Promise를 새로 생성해서 했으니 call back이랑은 다른 접근이 되는게 맞나싶어서 여쭤봅니다.

아래는 순서대로 제가 작성한 call back 사용한 예제와
Promise를 사용한 예제입니다.

<body>
    <script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk="
        crossorigin="anonymous"></script>
        <!-- 제이쿼리 CDN -->
    <script>
        (function fetchData(){
            var result = [];
        function getconsole(){
            console.log('데이터 호출결과 뒤에 나올 함수');
        }

        $.ajax({
            url:'https://api.hnpwa.com/v0/news/1.json',
            success(data){
                console.log('데이터 호출결과:',data);
                result = data;
                getconsole();
            }
        });
				})();
    </script>
</body>
<body>
    <script src="https://code.jquery.com/jquery-3.6.0.js" 
    integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script>
    <!-- 제이쿼리 CDN -->
    <script>
        function callAjax(){
            return new Promise((resolve,reject)=>{
                $.ajax({
                    url: 'https://api.hnpwa.com/v0/news/1.json',
                    success(data){ 
                        resolve(data);
                    }
                });
            });
        }
        function getconsole(){ 
            return new Promise((resolve,reject)=>{
                resolve(console.log('데이터 호출결과 뒤에 나올 함수'));   
            });
        }
        (function fetchData(){
            var result = [];
            callAjax()
                .then((data)=>{
                    console.log('데이터 호출결과:',data);
                    result = data;
                })
                .then(getconsole)
                .catch(error=>console.log);
        })();
    </script>
</body>

답변 1

1

안녕하세요! 지나가다 보게 되었습니다, 다른 접근이라는 것이 어떤 말씀이신지는 모르겠네요. 콜백함수는 기존의 특별한 선언이나 문법적인 특징을 가지고 있는 것이 아니라 코드 실행 시점을 구분 짓는 걸로 알고 있어요. 그래서 제게 콜백함수와 프로미스가 다른 접근이 될 수 있다는 것은 이해가 잘 안갔던 것 같습니다! 

역사적으로 콜백함수와 프로미스는 특별한 것이 아니라, 기존 콜백함수가 가지고 있었던 "절차적 사고의 위배" 또는 "코드 인덴팅" 이슈를 개선하기 위해 나온 것이라고 이해하시면 될 것 같아요!