본문 바로가기

programming study/JavaScript

45장. 프로미스(1)

본 내용은 모던 자바스크립트 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