Delen via


Doorloop en itereren over gegevens die zijn geretourneerd door de Azure SDK voor JavaScript

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-of lus 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}`
  );

Aanvullende bronnen