출처: 이웅모 《모던 자바스크립트 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 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;
}
}
const [a, b] = await Promise.all([fetchA(), fetchB()]);
await 남발 직렬화로 성능 깎지 않기.
제너레이터 = 일반형 일시정지 프로토콜 / async-await = 프로미스 특화 문법.