출처: 이웅모 《모던 자바스크립트 Deep Dive》 46장 · 본인 말로 정리

한줄 요약

제너레이터는 yield로 멈췄다 재개하며 호출자와 값을 주고받는 특수 함수. async/await는 프로미스를 동기처럼 읽히게 하는 문법.

제너레이터

function* gen() {
  const a = yield 1;
  return a + 2;
}
const g = gen();
g.next();    // { value: 1, done: false }
g.next(10);  // { value: 12, done: true }

async / await

async function loadUser(id) {
  try {
    const res = await fetch(`/api/users/${id}`);
    if (!res.ok) throw new Error('fail');
    return await res.json();
  } catch (e) {
    console.error(e);
    throw e;
  }
}

병렬 vs 직렬

const [a, b] = await Promise.all([fetchA(), fetchB()]);

await 남발 직렬화로 성능 깎지 않기.

체크포인트

제너레이터 = 일반형 일시정지 프로토콜 / async-await = 프로미스 특화 문법.