자바스크립트는 비동기 처리를 위한 하나의 패턴으로 콜백 함수를 사용한다

비동기 → 콜백 함수

하지만 전통적인 콜백 패턴은 콜백 헬로 인해 가독성이 나쁘고 비동기 처리 중 발생한 에러의 처리가 곤란하여 여러 개의 비동기 처리를 한번에 처리하는 데도 한계가 있다

비동기 처리를 위한 콜백 패턴의 단점


콜백 헬

const get = url => { 
	const xhr = new XMLHttpRequese(); //xml~객체 생성
	xhr.open('GET', url); //http 요청 초기화
	xhr.send();//http 요청 전송
	
	xhr.onload = () => { //이벤트 핸들러 프로퍼티에 이벤트 핸들러 바인딩하고 종료
//비동기 이벤트 핸들러 : get함수가 종료된 이후에 실행된다 
//그러므로 onload에서 서버의 응답 결과를 반환하거나 상위 스코프의 변수에 할당하면 X
	if(xhr.status === 200){ 
		return JSON.parse(xhr.response;
	} else { 
	console.error(`${xhr.status} ${shr.statsusText}`)
		}
	}
}

const response = get(url) 
console.log(response);

xhr.onload 이벤트 핸들러 프로파티에 바인딩한 이벤트 핸들러의 반환문은 get함수의 반환문이 아니다

그러므로 get함수는 undefined를 반환한다

함수의 반환값은 명시적으로 호출한 다음에 캐치할 수 있으므로

서버의 응답 결과를 콘솔에 출력한다.

⇒ 비동기 함수

⇒ 함수 내부에 비동기로 동작

<aside> 💡 콜백 함수가 고차함수가 종료된 이후에 호출된다

</aside>

그러므로 내부 콜백 함수에서 처리 결과를 외부로 반환하거나 상위 스코프의 변수에 할당하면 기대한 대로 동작하지 않는다