자바스크립트에 비동기 구현 방식은 콜백함수
, Promise
, async await
세 가지가 있다.
콜백함수는 나중에 호출할 함수를 뜻한다. 함수 타입의 값을 파라미터로 넘겨 파라미터로 받음 함수를 특정 작업이 끝나고 호출해주는 방식이다.
콜백함수의 동작방식을 예시로 들어보면 식당 예약을 생각해보자. 맛집에 갔는데 사람이 너무 많아서 대기자 명단에 이름과 전화번호를 남기고 전화가 올 때까지 다른곳에서 사부작거릴 수 있다.
식당에서 자리가 나서 전화가 왔다. 이 전화를 받는 시점이 콜백 함수가 호출되는 시점이라고 생각할 수 있다.
자리가 났을 때 연락이 오기때문에 미리 가서 기다릴 필요도 없고, 자리가 있는지 직접가서 확인할 필요도 없다.
예시
$.get('url', function(response) {
parseValue(response, function(id) {
auth(id, function(result) {
display(result, function(text) {
console.log(text);
});
});
});
});
이렇게 콜백함수 안에서 또 콜백함수를 지정해주는것이 콜백함수이다. 이 콜백함수의 문제점은
function parseValueDone(id) {
auth(id, authDone);
}
function authDone(result) {
display(result, displayDone);
}
function displayDone(text) {
console.log(text);
}
$.get('url', function(response) {
parseValue(response, parseValueDone);
});
중첩된 콜백함수를 각각의 함수로 구분했다. 해석해보자면
1. ajax통신으로 받은 데이터를 parseValue()로 파싱한다.
2. parseValueDone()에 파싱한 결과값인 id가 전달되고 auth()가 실행된다.
3. auth()로 인증을 거치고 나면 콜백 함수 authDone()이 실행된다.
4. 인증 결과 값인 resultfh display()를 호출하면 마지막으로 displayDone()이 실행되며 text가 콜솔에 출력됨