Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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-ofhurok 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}`
);