Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při práci se službami Azure často potřebujete zpracovávat velké sady dat. Sada Azure SDK pro JavaScript poskytuje asynchronní iterátory, které pomáhají efektivně spravovat tuto úlohu. Tento článek vysvětluje, co jsou asynchronní iterátory, jak je používat, a uvádí příklady klíčových služeb Azure.
Co jsou asynchronní iterátory?
Asynchronní iterátory jsou funkcí moderního JavaScriptu, která umožňuje asynchronní zpracování dat. Jsou užitečné pro zpracování stránkovaných dat z rozhraní API. Asynchronní iterátory používají smyčku for-await-of k iteraci dat a podle potřeby je načítají.
Použití asynchronních iterátorů nabízí několik výhod:
-
Zjednodušená syntaxe: Smyčka
for-await-ofusnadňuje využívání asynchronních iterátorů. - Načítání dat na vyžádání: Načtěte pouze potřebná data, což snižuje využití paměti a zatížení back-endu.
- Budoucí kompatibilita: Asynchronní iterátory jsou standardní funkcí v JavaScriptu, což zajišťuje kompatibilitu s budoucími aktualizacemi a knihovnami.
Pokud s asynchronními iterátory začínáte, následující koncepty vám pomůžou pochopit, jak stránkování funguje v sadách Azure SDK pro JavaScript.
-
Asynchronní funkce: Funkce, které vrací znak
Promise. - Generátory: Funkce, které je možné pozastavit a obnovit a které poskytují více hodnot.
- Asynchronní generátory: Zkombinujte funkce asynchronních funkcí a generátorů a vytvořte asynchronní iterátory.
Klientské knihovny Azure používají asynchronní iterátory ke zpracování potenciálně velkých kolekcí dat. Níže jsou uvedeny příklady použití asynchronních iterátorů s různými službami Azure.
Smyčka přes několik položek
Pokud je sada výsledků jenom několik položek, můžete si tento malý seznam projít. Následující kód prochází malou sadou kontejnerů ve službě Azure Storage:
for await (const container of blobServiceClient.listContainers()) {
console.log(`Container: ${container.name}`);
}
Procházení dat po stránkách
Pokud je vaše datová sada větší, můžete chtít vrátit data ve stránkách, a poté iterovat přes položky na každé stránce. Následující kód prochází data po stránce a pak jednotlivé položky.
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}`);
}
}
}
Pokračovat ve smyčce
Pokud potřebujete mít větší kontrolu nad smyčkou, včetně obnovení smyčky, použijte token pokračování. Stránkovaný iterátor také podporuje obnovení z tokenu pokračování. V následujícím příkladu použijeme token pokračování z první iterace k obnovení iterace na druhé stránce.
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}`
);