Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer u met Azure-services werkt, moet u vaak grote gegevenssets verwerken. De Azure SDK voor JavaScript biedt asynchrone iterators om deze taak efficiƫnt te beheren. In dit artikel wordt uitgelegd wat asynchrone iterators zijn, hoe u deze kunt gebruiken en voorbeelden biedt voor belangrijke Azure-services.
Wat zijn asynchrone Iterators?
Asynchrone iterators zijn een functie in modern JavaScript waarmee u gegevens asynchroon kunt gebruiken. Ze zijn handig voor het verwerken van gepagineerde gegevens uit API's. Asynchrone iterators gebruiken de for-await-of lus om gegevens te herhalen, zodat deze naar behoefte worden opgehaald.
Het gebruik van asynchrone iterators biedt verschillende voordelen:
-
Vereenvoudigde syntaxis: De
for-await-oflus maakt het gebruik van asynchrone iterators eenvoudig. - Ophalen van gegevens op aanvraag: Haal alleen de gegevens op die u nodig hebt, verminder het geheugengebruik en de belasting op de back-end.
- Toekomstige compatibiliteit: Asynchrone iterators zijn een standaardfunctie in JavaScript, die compatibiliteit met toekomstige updates en bibliotheken garandeert.
Als u geen kennis hebt van asynchrone iterators, helpen de volgende concepten om te begrijpen hoe paging werkt in Azure SDK's voor JavaScript.
-
Asynchrone functies: Functies die een
Promise. - Generatoren: Functies die kunnen worden onderbroken en hervat, wat meerdere waarden oplevert.
- Asynchrone generatoren: Combineer de functies van asynchrone functies en generatoren om asynchrone iterators te produceren.
Azure-clientbibliotheken gebruiken asynchrone iterators om mogelijk grote verzamelingen gegevens te verwerken. Hieronder vindt u voorbeelden van het gebruik van asynchrone iterators met verschillende Azure-services.
Over een paar items itereren
Als de resultatenset slechts een paar items is, kunt u deze kleine lijst doorlopen. Met de volgende code wordt een kleine set containers in Azure Storage doorlopen:
for await (const container of blobServiceClient.listContainers()) {
console.log(`Container: ${container.name}`);
}
Gegevens doorlopen per pagina
Als uw gegevensset groter is, kunt u overwegen de gegevens in pagina's terug te geven en de items op elke pagina door te lopen. De volgende code doorloopt de gegevens per pagina en vervolgens elk item.
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}`);
}
}
}
Doorgaan met herhalen
Als u meer controle over de lus wilt hebben, inclusief het hervatten van de lus, gebruikt u een vervolgtoken. De pagina-iterator biedt ook ondersteuning voor hervatting van een vervolgtoken. In het volgende voorbeeld gebruiken we het vervolgtoken van de eerste iteratie om de iteratie op de tweede pagina te hervatten.
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}`
);