본문 바로가기

Today I Learned

모던 자바스크립트 Deep Dive 44장~46장 REST API/프로미스/AJAX

44장 REST API

  • REST : HTTP 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처 (자원, 행위, 표현으로 구성된다.)
  • REST API : REST 기반으로 서비스 API 구현한
  • RESTful : REST의 기본 원칙을 성실히 지킨 서비스 디자인

45장 프로미스 : 비동기 처리를 위한 패턴

비동기 함수 내부의 비동기로 동작하는 코드는 비동기 함수가 종료된 이후에 완료된다! 그래서 비동기 함수 내부의 비동기로 동작하는 코드에서 처리 결과를 외부로 반환하면 의도대로 동작하지 않는다!! 에러 처리가 곤란해진다!!! 그래서 프로미스 사용하면 콜백 지옥을 벗어나서 에러처리를 보다 효율적으로 있다.

마이크로태스크 에는 프로미스의 후속 처리 메서드의 콜백 함수가 일시 저장된다. 외의 비동기 함수는 태스크 큐에 일시 저장된다. 마이크로태스크 큐는 태스크 큐보다 우선 순위가 높다.

46장 제너레이터와 async/await

코드 블록의 실행을 일시 중지했다가 필요한 시점에 재개할 있도록 하는 함수다. 함수 호출자에게 함수 실행의 제어권을 양도한다. 제너레이터는 function* 키워드로 선언하고 화살표 함수나 new 연산자로는 호출할 없다.

function* getDecFunc(){
	yield 1;
}

제너레이터를 호출하면 제너레이터 객체를 생성해서 반환한다. 객체는 이터러블이면서 이터레이터다. 이러한 제너레이터의 특성을 활용하면 비동기 처리를 동기처럼 구현할 있다.

// 무한 이터러블을 생성하는 제너레이터 함수
const infiniteFibonacci = (function* () {
  let [pre, cur] = [0, 1];


  while (true) {
    [pre, cur] = [cur, pre + cur];
    yield cur;
  }
}());


// infiniteFibonacci는 무한 이터러블이다.
for (const num of infiniteFibonacci) {
  if (num > 10000) break;
  console.log(num); // 1 2 3 5 8...2584 4181 6765
}

제너레이터보다 간단하고 가독성 좋게 비동기 처리를 동기처럼 처리할 있는 것은 async/await이다. contructor 메서드는 인스턴스를 반환해야하기 때문에 async 메서드가 없다. async 메서드는 프로미스를 반환한다.