Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando si usano i servizi di Azure, spesso è necessario elaborare set di dati di grandi dimensioni. Azure SDK per JavaScript fornisce iteratori asincroni per semplificare la gestione efficiente di questa attività. Questo articolo illustra quali iteratori asincroni sono, come usarli e fornisce esempi per i principali servizi di Azure.
Che cosa sono gli iteratori asincroni?
Gli iteratori asincroni sono una funzionalità di JavaScript moderno che consente di utilizzare i dati in modo asincrono. Sono utili per gestire i dati impaginati dalle API. Gli iteratori asincroni usano il for-await-of ciclo per scorrere i dati, recuperandolo in base alle esigenze.
L'uso di iteratori asincroni offre diversi vantaggi:
-
Sintassi semplificata: Il ciclo semplifica l'utilizzo
for-await-ofdi iteratori asincroni. - Recupero di dati su richiesta: Recuperare solo i dati necessari, riducendo l'utilizzo della memoria e il carico nel back-end.
- Compatibilità futura: Gli iteratori asincroni sono una funzionalità standard in JavaScript, garantendo la compatibilità con gli aggiornamenti e le librerie futuri.
Se non si ha familiarità con gli iteratori asincroni, i concetti seguenti consentono di comprendere il funzionamento del paging negli SDK di Azure per JavaScript.
-
Funzioni asincrone: Funzioni che restituiscono un oggetto
Promise. - Generatori: Funzioni che possono essere sospese e riprese, producendo più valori.
- Generatori asincroni: Combinare le caratteristiche delle funzioni asincrone e dei generatori per produrre iteratori asincroni.
Le librerie client di Azure usano iteratori asincroni per gestire raccolte di dati potenzialmente di grandi dimensioni. Di seguito sono riportati esempi di come usare iteratori asincroni con vari servizi di Azure.
Iterare su alcuni elementi
Se il set di risultati è costituito solo da pochi elementi, è possibile scorrere l'elenco di piccole dimensioni. Il codice seguente esegue un ciclo in un piccolo set di contenitori nell'archiviazione di Azure.
for await (const container of blobServiceClient.listContainers()) {
console.log(`Container: ${container.name}`);
}
Iterare sui dati per pagina
Se il set di dati è più grande, è consigliabile restituire i dati nelle pagine, quindi eseguire l'iterazione degli elementi in ogni pagina. Il codice seguente esegue un ciclo di dati per pagina, quindi ogni elemento.
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}`);
}
}
}
Continua a ripetere
Se è necessario avere un maggiore controllo sul ciclo, inclusa la ripresa del ciclo, usare un token di continuazione. L'iteratore con paging supporta anche la ripresa da un token di continuazione. Nell'esempio seguente viene usato il token di continuazione della prima iterazione per riprendere l'iterazione nella seconda pagina.
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}`
);