Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao trabalhar com os serviços do Azure, você geralmente precisa processar grandes conjuntos de dados. O SDK do Azure para JavaScript fornece iteradores assíncronos para ajudar a gerenciar essa tarefa com eficiência. Este artigo explica o que são iteradores assíncronos, como usá-los e fornece exemplos para os principais serviços do Azure.
O que são iteradores assíncronos?
Iteradores assíncronos são um recurso no JavaScript moderno que permite consumir dados de forma assíncrona. Eles são úteis para lidar com dados paginados de APIs. Os iteradores assíncronos usam o loop for-await-of para iterar dados, buscando-os conforme necessário.
O uso de iteradores assíncronos oferece várias vantagens:
- Sintaxe simplificada: O
for-await-ofloop torna simples o consumo de iteradores assíncronos. - Busca de dados sob demanda: Busque apenas os dados necessários, reduzindo o uso de memória e a carga no back-end.
- Compatibilidade futura: Iteradores assíncronos são um recurso padrão no JavaScript, garantindo compatibilidade com atualizações e bibliotecas futuras.
Se você não estiver familiarizado com iteradores assíncronos, os conceitos a seguir ajudarão a entender como a paginação funciona nos SDKs do Azure para JavaScript.
- Funções assíncronas: Funções que retornam um
Promise. - Geradores: Funções que podem ser pausadas e retomadas, gerando vários valores.
- Geradores assíncronos: Combine os recursos de funções assíncronas e geradores para produzir iteradores assíncronos.
As bibliotecas de clientes do Azure usam iteradores assíncronos para lidar com coleções de dados potencialmente grandes. Abaixo estão exemplos de como usar iteradores assíncronos com vários serviços do Azure.
Percorrer alguns elementos
Se o conjunto de resultados tiver apenas alguns itens, você poderá percorrer essa pequena lista. O código a seguir percorre um pequeno conjunto de contêineres no Armazenamento do Azure.
for await (const container of blobServiceClient.listContainers()) {
console.log(`Container: ${container.name}`);
}
Percorrer dados página por página
Se o conjunto de dados for maior, talvez você queira retornar os dados por páginas e iterar sobre os itens de cada página. O código a seguir percorre os dados por página e, em seguida, cada item.
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}`);
}
}
}
Continuar o looping
Se você precisar ter mais controle sobre o loop, incluindo a retomada do loop, use um token de continuação. O iterador de páginas também dá suporte à retomada de um token de continuação. No exemplo a seguir, usamos o token de continuação da primeira iteração para retomar a iteração na segunda página.
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}`
);