A JavaScripthez készült Azure SDK-ból visszaadott adatokon történő hurkolás és lapozás

Az Azure-szolgáltatások használatakor gyakran nagy adatkészleteket kell feldolgoznia. Az Azure SDK for JavaScript aszinkron iterátorokat biztosít a feladat hatékony kezeléséhez. Ez a cikk bemutatja az aszinkron iterátorok működését, azok használatát, és példákat tartalmaz a legfontosabb Azure-szolgáltatásokra.

Mik azok az aszinkron iterátorok?

Az aszinkron iterátorok a modern JavaScript egyik funkciója, amely lehetővé teszi az adatok aszinkron használatát. Az API-kból származó lapszámozott adatok kezelésére hasznosak. Az aszinkron iterátorok a for-await-of ciklus segítségével iterálják az adatokat, és szükség szerint kérik le azokat.

Az aszinkron iterátorok használatának számos előnye van:

  • Egyszerűsített szintaxis: A for-await-of hurok egyszerűvé teszi az aszinkron iterátorok fogyasztását.
  • Igény szerinti adatbeolvasás: Csak a szükséges adatok beolvasása, csökkentve a memóriahasználatot és a háttérrendszer betöltését.
  • Jövőbeli kompatibilitás: Az aszinkron iterátorok a JavaScript szabványos funkciói, amelyek biztosítják a jövőbeli frissítésekkel és kódtárakkal való kompatibilitást.

Ha még nem ismeri az aszinkron iterátorokat, az alábbi fogalmak segítenek megérteni, hogyan működik a lapozás a JavaScripthez készült Azure SDK-kban.

  • Aszinkron függvények: Függvények, amelyek egy Promise.
  • Generátorok: A szüneteltethető és folytatható függvények több értéket eredményeznek.
  • Aszinkron generátorok: Az aszinkron függvények és generátorok funkcióinak kombinálásával aszinkron iterátorokat hozhat létre.

Az Azure-ügyfélkódtárak aszinkron iterátorokkal kezelik a potenciálisan nagy adatgyűjteményeket. Az alábbiakban példákat láthat az aszinkron iterátorok különböző Azure-szolgáltatásokkal való használatára.

Ismételj néhány elemet

Ha az eredményhalmaz csak néhány elemből áll, végighaladhat ezen a kis listán. A következő kód az Azure Storage egy kis tárolókészletén halad végig:

for await (const container of blobServiceClient.listContainers()) {
  console.log(`Container: ${container.name}`);
}

Adatok feldolgozása oldalanként

Ha az adatkészlet nagyobb, előfordulhat, hogy a lapokban lévő adatokat szeretné visszaadni, majd az egyes lapok elemeit iterálni. Az alábbi kód lapról lapra halad végig az adatokon, majd az egyes elemeken.

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

Ismétlés folytatása

Ha nagyobb mértékben kell szabályoznia a ciklust, beleértve annak folytatását is, használjon folytatási tokent. A lapozott iterátor támogatja a folytatási jogkivonatból történő folytatást is. Az alábbi példában az első iteráció folytatási jogkivonatát használjuk az iteráció folytatásához a második oldalon.

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

További erőforrások