AsyncIterable<T>

활용 사례는 모두 같은 비동기 반복 계약으로 읽을 수 있다

파일, 웹소켓, DB 커서는 도착 방식은 달라도 next가 Promise를 돌려주고 for await가 값을 하나씩 기다린다는 점이 같습니다.

파일 스트림

line

AsyncGenerator<string>

줄이 준비될 때마다 문자열을 yield하고, 소비자는 메모리에 전체 파일을 올리지 않습니다.

웹소켓

message

AsyncIterable<string>

메시지가 들어온 순서대로 처리하고, break로 필요한 시점에 연결 소비를 멈출 수 있습니다.

DB 커서

page

AsyncGenerator<DbRecord[]>

결과를 페이지 단위로 받아서 처리하므로, 대량 데이터도 순차적인 흐름으로 다룰 수 있습니다.

생산자

[Symbol.asyncIterator]()
next(): Promise<IteratorResult<T>>

소비자 판단

  • value 루프 변수 T로 추론
  • done true면 반복 종료
  • await 다음 값 준비까지 대기

타입스크립트 요점

AsyncIterable<T>가 명확하면 for await 루프 안의 item도 T로 좁혀집니다. 그래서 line.length, page.map 같은 사용 가능 여부를 컴파일 단계에서 확인할 수 있습니다.