본 내용은 모던 자바스크립트 Deep Dive - 자바스크립트의 기본 개념과 동작 원리를 토대로 작성하였습니다.
45.0 프로미스란?
- 전통적인 비동기 처리 방식인 콜백 함수는 콜백 헬을 야기
- 나쁜 가독성
- 에러 핸들링의 문제
- 프로미스
- ES6
- 콜백 패턴의 단점 보완
- 비동기 처리 시점을 명확하게 표현
- 비동기 함수
- 코드가 완료되지 않아도 기다리지 않고 즉시 종료
- 비동기 함수 내부의 비동기로 동작하는 코드는 비동기 함수가 종료된 이후에 완료됨
- 처리 결과를 외부에 반환 불가
- 상위 스코프의 변수에 할당 불가
- 후속 처리는 비동기 함수 내부에서 수행해야 함(콜백 함수)
45.1 비동기 처리를 위한 콜백 패턴의 단점
45.1.1 콜백 헬
- 비동기 함수는 처리 결과를 외부에 반환 불가
- 태스크 큐에 저장되어 대기 -> 콜스택이 빔 -> 이벤트 루프에 의해 콜스택에 푸시 -> 실행
- 비동기 함수의 결과를 이용하여 또 다른 비동기 함수를 호출해야 하는 경우, 콜백 함수 호출이 중첩되어 복잡도가 높아짐
const asyncFun = (url, callBack) => {
...
};
asyncFun('/fats', cats => {
asyncFunc(`/${cats}`, cat => {
asyncFunc(`/${cat}`, result => {
console.log(result);
});
});
});
45.1.2 에러 처리의 한계
- 콜백 패터는 에러 처리가 어려움
- 비동기 함수에 전달된 콜백 함수의 실행은 비동기 함수가 아님
- 비동기 함수는 콜백 함수가 호출되는 것을 기다리지 않고 즉시 종료 됨
- 콜백 함수는 태스크 큐로 푸시되고 콜 스택이 비면 이벤트 루프에 의해 콜 스택에 푸시되어 실행 됨
- 에러는 호출자 방향으로 전파되므로 비동기 함수의 콜백 함수의 에러는 캐치할 수 없음
'programming study > JavaScript' 카테고리의 다른 글
45장. 프로미스(2) (0) | 2022.05.25 |
---|---|
Vue.js - 브라우저 저장소를 이용한 인증 값 관리 (0) | 2022.05.24 |
44장. REST API (0) | 2022.05.22 |
43장. Ajax(2) (0) | 2022.05.22 |
43장. Ajax(1) (0) | 2022.05.22 |