javascript / expert
Snippet
Asynchroner Generator-Steuerfluss für paginiertes Route-Streaming
Dieses Experten-Snippet verwendet asynchrone Generatoren (`async function*`), um den sequenziellen Steuerfluss über paginierte externe API-Antworten in Next.js Route Handlern zu verwalten. Es liefert nicht-archivierte Protokolleinträge verzögert einzeln zurück und ermöglicht so speichereffizientes Streaming, ohne alle Seiten auf einmal laden zu müssen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
export async function* fetchPaginatedAuditLogs(initialUrl) {let nextUrl = initialUrl;while (nextUrl) {const res = await fetch(nextUrl, { headers: { 'Accept': 'application/json' } });if (!res.ok) throw new Error(`HTTP fetch failure: ${res.status}`);const data = await res.json();nextUrl = data.meta?.nextCursor ? `${initialUrl}?cursor=${data.meta.nextCursor}` : null;for (const record of data.records) {if (record.isArchived) continue;yield record;}}}
nextjs
Erklärung
1
export async function* fetchPaginatedAuditLogs(initialUrl) {
Deklariert eine asynchrone Generatorfunktion, die ein AsyncIterator-Objekt für Werte auf Anfrage zurückgibt.
2
while (nextUrl) {
Steuert die Haupt-Schleifenausführung, solange ein gültiger Cursor-Endpunkt existiert.
3
if (!res.ok) throw new Error(`HTTP fetch failure: ${res.status}`);
Führt eine sofortige Unterbrechung des Steuerflusses bei unerwartetem HTTP-Fehlerstatus aus.
4
for (const record of data.records) {
Iteriert über die Datensätze der aktuellen Antwort.
5
if (record.isArchived) continue;
Nutzt bedingten Steuerfluss, um archivierte Einträge vor der Rückgabe zu überspringen.
6
yield record;
Pausiert die Funktionsausführung und gibt den aktuellen Datensatz an den asynchronen Aufrufer zurück.