"전체가 끝날 때까지 기다리지 말고, 준비된 조각부터 흐르게 할 수 있어."
AsyncIterable<T>의 뜻
AsyncIterable<T>는 다음 값을 얻는 과정 자체가 비동기인 연속 데이터를 나타내. for await (const item of source)를 쓰면 각 item은 T로 추론되고, 반복문은 다음 Promise가 끝날 때까지 기다렸다가 이어져.
일반 배열의 Iterable<T>와 달리 네트워크 스트림, 페이지 단위 조회, 파일 청크처럼 값 사이에 시간이 걸리는 자료에 맞아. 모든 항목을 메모리에 모으지 않고 처리할 수 있다는 점도 중요하지.
비동기 제너레이터 만들기
async function* pages(): AsyncGenerator<Page> 안에서는 yield page로 값을 하나씩 내보내고 await로 다음 자료를 기다릴 수 있어. 소비자가 반복을 멈추면 제너레이터의 finally에서 연결이나 리더를 정리하도록 설계해.
Promise<T[]>와의 차이
Promise<T[]>는 전체 배열이 한 번에 준비되는 하나의 Promise야. AsyncIterable<T>는 값이 하나씩 도착하는 스트림이라 마지막 값이 오기 전부터 첫 값을 처리할 수 있어. 큰 데이터나 느린 생산자에는 스트림이, 작은 일괄 결과에는 Promise 배열이 더 단순해.
비동기 이터러블은 '나중에 한 값'인 Promise를 '시간을 두고 여러 값'으로 확장한 계약이야. 흐름뿐 아니라 종료와 정리까지 API의 일부로 다뤄.