"값마다 Promise. Type system 이 이해하는 stream."
Async iterable 이 뭐
Async iterable 이 async next(): Promise<{ value: T; done: boolean }> method 있는 object 반환하는 [Symbol.asyncIterator]() method 가진 object. for await (const x of stream) 가 그걸 walk, 각 값 await 한 후 계속.
이게 Node.js stream, file line iterator, HTTP-server request body 가 타입 붙는 법. 시간이 지나 도착하는 일련의 값 있는 어디든 async iterable 이 canonical 모양.
Promise yield 하는 generator
Async iterable 만드는 가장 쉬운 방법이 async generator: async function* gen(): AsyncIterable<number> { yield 1; yield 2; yield await fetchValue() }. 각 yield 가 stream 의 한 값 만듦; generator 안 await 가 값 준비될 때까지 pause.
Promise<T[]> 와의 차이
Promise<T[]> 가 전체 배열로 resolve 하는 한 Promise. AsyncIterable<T> 가 stream — 값이 한 번에 하나씩 도착, 마지막 도착 전 첫 거 처리 시작 가능. 큰 데이터나 느린 producer 엔 async iterable 이 stream 가능하게; 작은 batch 데이터엔 Promise<T[]> 가 더 단순.
AsyncIterable<T> 와 for await 손 뻗어. 모든 값이 함께 도착하면 Promise<T[]> 손 뻗어.