Iterator Helpers의 지연 평가
조기 종료를 take에 위임하면 필요한 만큼만 fetch 한다. 페이지네이션 API에서 “조건에 맞는 N개”만 필요할 때. sync 는 네이티브(모던 브라우저·Node 22+), async 는 제안(Stage 2)이라 core-js 폴리필.
import 'core-js/proposals/async-iterator-helpers.js'
type Page<T> = { items: T[]; next: string | null }
/** 커서 페이지네이션 API 를 순회한다 — 현재 페이지를 다 당긴 뒤에야 다음 페이지를 받는다. */
async function* fetchPages<T>(url: string | null): AsyncGenerator<T> {
while (url) {
const { items, next }: Page<T> = await fetch(url).then((r) => r.json())
yield* items
url = next
}
}
await AsyncIterator.from(fetchPages<Item>('/api/items')).filter(isValid).take(10).toArray()
- 제안이 개정 중이다 — 동시
next()동작이 미정이라 폴리필과 다를 수 있다. 순차로 당기는toArray엔 영향 없음. - TS 타입이 없다 — TS 5.8 lib·core-js 어디에도
AsyncIterator.from선언이 없어 직접 선언한다.