Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beim Arbeiten mit Azure-Diensten müssen Sie häufig große Datenmengen verarbeiten. Das Azure SDK für JavaScript bietet asynchrone Iteratoren zur effizienten Verwaltung dieser Aufgabe. In diesem Artikel wird erläutert, was asynchrone Iteratoren sind, wie sie verwendet werden, und beispiele für wichtige Azure-Dienste.
Was sind asynchrone Iteratoren?
Asynchrone Iteratoren sind ein Feature in modernem JavaScript, mit dem Sie Daten asynchron nutzen können. Sie sind nützlich für die Behandlung von paginierten Daten aus APIs. Asynchrone Iteratoren verwenden die for-await-of Schleife, um Daten zu durchlaufen und nach Bedarf abzurufen.
Die Verwendung von asynchronen Iteratoren bietet mehrere Vorteile:
- Vereinfachte Syntax: Die
for-await-ofSchleife macht die Verwendung asynchroner Iteratoren unkompliziert. - On-Demand-Datenabruf: Rufen Sie nur die benötigten Daten ab, reduzieren Sie die Speicherauslastung und die Auslastung im Back-End.
- Zukünftige Kompatibilität: Asynchrone Iteratoren sind ein Standardfeature in JavaScript, das die Kompatibilität mit zukünftigen Updates und Bibliotheken sicherstellt.
Wenn Sie mit asynchronen Iteratoren noch nicht vertraut sind, helfen ihnen die folgenden Konzepte zu verstehen, wie paging in Azure SDKs für JavaScript funktioniert.
- Asynchrone Funktionen: Funktionen, die ein
Promisezurückgeben. - Generatoren: Funktionen, die angehalten und fortgesetzt werden können, sodass mehrere Werte zurückgegeben werden.
- Asynchrone Generatoren: Kombinieren Sie die Features asynchroner Funktionen und Generatoren, um asynchrone Iteratoren zu erzeugen.
Azure-Clientbibliotheken verwenden asynchrone Iteratoren, um potenziell große Sammlungen von Daten zu verarbeiten. Nachfolgend finden Sie Beispiele für die Verwendung von asynchronen Iteratoren mit verschiedenen Azure-Diensten.
Über einige Elemente iterieren
Wenn das Resultset nur ein paar Elemente enthält, können Sie diese kleine Liste durchlaufen. Der folgende Code durchläuft eine kleine Gruppe von Containern in Azure Storage:
for await (const container of blobServiceClient.listContainers()) {
console.log(`Container: ${container.name}`);
}
Durchlaufen von Daten pro Seite
Wenn Ihr Dataset größer ist, möchten Sie die Daten vielleicht in Seiten zurückgeben und dann über die Elemente auf jeder Seite iterieren. Der folgende Code durchläuft die Daten pro Seite und dann jedes Element.
const firstPage = await blobServiceClient.listContainers().byPage().next();
const continuationToken = firstPage.value.continuationToken;
// The iterator also supports iteration by page.
for await (const page of blobServiceClient
.listContainers()
.byPage({ continuationToken })) {
if (page.containerItems) {
for (const container of page.containerItems) {
console.log(`Container: ${container.name}`);
}
}
}
Schleife fortsetzen
Wenn Sie mehr Kontrolle über die Schleife haben möchten, einschließlich der Wiederaufnahme der Schleife, verwenden Sie ein Fortsetzungs-Token. Der paged Iterator unterstützt auch die Fortsetzung der Schleife über ein Continuation Token. Im folgenden Beispiel verwenden wir das Fortsetzungstoken aus der ersten Iteration, um die Iteration auf der zweiten Seite fortzusetzen.
console.log('Starting to process pages...');
let processingComplete = false;
let pageNumber = 1;
try {
let page = undefined;
let continuationToken = undefined;
do {
// Get a page of results
page = await blobServiceClient.listContainers().byPage().next();
// Get the continuation token from the current page
continuationToken = page?.value?.continuationToken;
console.log(
`Processing page ${pageNumber}, items ${page.value.containerItems?.length || 0} with continuation token: ${continuationToken || 'none'}`
);
console.log(page.value);
// Scenario to continue paging:
// Perform an operation on the current page results
// if the operation returns true, stop processing
processingComplete = await fakeProcessor(page.value);
if (processingComplete) {
console.log('Stopping processing.');
break;
}
console.log(
`Processing complete for page ${pageNumber++}: get next page if a continuation token exists`
);
} while (continuationToken && !processingComplete);
console.log(
`Finished processing. Total pages processed: ${pageNumber - 1}`
);