기술 면접 대비 질문 (JavaScript)

2533 단어 JavaScriptJavaScript

Q. promise(프로미스)의 개념에 대해서 설명해주세요.

비동기 처리를 위한 하나의 패턴으로 콜백 함수를 사용하는데, 전통적인 콜백 패턴은 콜백 헬로 인해 가독성이 나쁘고 비동기 처리 중 발생한 에러의 처리가 곤란하다. ES6에서는 비동기 처리를 위한 또 다른 패턴으로 프로미스(Promise)를 도입했다.

비동기 처리 모델은 병렬적으로 태스크를 수행한다. 즉, 태스크가 종료되지 않은 상태라도 대기하지 않고 즉시 다음 태스크를 실행한다. 자바스크립트의 대부분의 DOM 이벤트와 Timer 함수(setTimeout, setInterval), Ajax 요청은 비동기식 처리 모델로 동작한다.

프로미스의 생성

const promise = new Promise((resolve, reject) => {
  if (/* 비동기 작업 수행 성공 */) {
    resolve('result');
  } else {
    reject('failure reason');
  }
});

프로미스의 후속 처리 메소드

then

then 메소드는 두 개의 콜백 함수를 인자로 전달 받는다. 첫 번째 콜백 함수는 성공(fulfilled, resolve 함수가 호출된 상태) 시 호출되고 두 번째 함수는 실패(rejected, reject 함수가 호출된 상태) 시 호출된다.

catch

예외(비동기 처리에서 발생한 에러와 then 메소드에서 발생한 에러)가 발생하면 호출된다.

프로미스 체이닝

비동기 함수의 처리 결과를 가지고 다른 비동기 함수를 호출해야 하는 경우, 함수의 호출이 중첩이 되어 복잡도가 높아지는 콜백 헬이 발생한다. 프로미스는 후속 처리 메소드를 체이닝하여 여러 개의 프로미스를 연결하여 사용할 수 있다.

출처

모던 자바스크립트 Deep Dive

좋은 웹페이지 즐겨찾기