Megosztás a következőn keresztül:


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 az adatokat oldalakban 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