Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas pracy z usługami platformy Azure często trzeba przetwarzać duże zestawy danych. Zestaw Azure SDK dla języka JavaScript udostępnia iteratory asynchroniczne ułatwiające efektywne zarządzanie tym zadaniem. W tym artykule wyjaśniono, czym są iteratory asynchroniczne, jak ich używać, oraz przedstawiono przykłady kluczowych usług platformy Azure.
Co to są asynchroniczne iteratory?
Iteratory asynchroniczne to funkcja nowoczesnego języka JavaScript, która umożliwia asynchroniczne korzystanie z danych. Są one przydatne do obsługi danych podzielonych na strony z interfejsów API. Iteratory asynchroniczne używają for-await-of pętli do iteracji danych, pobierając je zgodnie z potrzebami.
Korzystanie z iteratorów asynchronicznych zapewnia kilka zalet:
-
Uproszczona składnia: Pętla
for-await-ofsprawia, że korzystanie z iteratorów asynchronicznych jest proste. - Pobieranie danych na żądanie: Pobieraj tylko potrzebne dane, zmniejszając użycie pamięci i obciążenie zaplecza.
- Zgodność w przyszłości: Iteratory asynchroniczne są standardową funkcją języka JavaScript, zapewniając zgodność z przyszłymi aktualizacjami i bibliotekami.
Jeśli dopiero zaczynasz korzystać z iteratorów asynchronicznych, poniższe pojęcia pomagają zrozumieć, jak działa stronicowanie w zestawach AZURE SDK dla języka JavaScript.
-
Funkcje asynchroniczne: Funkcje zwracające element
Promise. - Generatory: Funkcje, które można wstrzymać i wznowić, co daje wiele wartości.
- Generatory asynchroniczne: Połącz funkcje funkcji asynchronicznych i generatorów, aby tworzyć iteratory asynchroniczne.
Biblioteki klienckie platformy Azure używają iteratorów asynchronicznych do obsługi potencjalnie dużych kolekcji danych. Poniżej przedstawiono przykłady używania iteratorów asynchronicznych z różnymi usługami platformy Azure.
Iterowanie przez kilka elementów
Jeśli zestaw wyników to tylko kilka elementów, możesz wykonać pętlę za pomocą tej małej listy. Poniższy kod przebiega przez niewielki zbiór kontenerów w usłudze Azure Storage.
for await (const container of blobServiceClient.listContainers()) {
console.log(`Container: ${container.name}`);
}
Iteracja po danych na stronach
Jeśli zestaw danych jest większy, możesz zwrócić dane w stronach, a następnie iterować po elementach na każdej stronie. Poniższy kod przegląda dane strona po stronie, a następnie każdy element.
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}`);
}
}
}
Kontynuuj pętlę
Jeśli potrzebujesz większej kontroli nad pętlą, w tym wznowienia pętli, użyj tokenu kontynuacji. Iteracje stronicowane obsługują również wznawianie za pomocą tokenu kontynuacji. W poniższym przykładzie użyjemy tokenu kontynuacji z pierwszej iteracji, aby wznowić iterację na drugiej stronie.
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}`
);