Bagikan melalui


Perulangan dan mengolah halaman data yang dikembalikan dari Azure SDK untuk JavaScript

Saat bekerja dengan layanan Azure, Anda sering kali perlu memproses sekumpulan data besar. Azure SDK for JavaScript menyediakan iterator asinkron untuk membantu mengelola tugas ini secara efisien. Artikel ini menjelaskan apa itu iterator asinkron, cara menggunakannya, dan memberikan contoh untuk layanan Azure utama.

Apa itu Iterator asinkron?

Iterator asinkron adalah fitur dalam JavaScript modern yang memungkinkan Anda untuk menggunakan data secara asinkron. Ini berguna untuk menangani data yang dipaginasi dari API. Iterator asinkron menggunakan perulangan for-await-of untuk melakukan iterasi atas data, mengambilnya sesuai kebutuhan.

Menggunakan iterator asinkron memberikan beberapa keuntungan:

  • Sintaks yang Disederhanakan: Perulangan for-await-of membuat penggunaan iterator asinkron menjadi mudah.
  • Pengambilan Data Sesuai Permintaan: Ambil hanya data yang Anda butuhkan, kurangi penggunaan memori dan muat pada backend.
  • Kompatibilitas Di Masa Mendatang: Iterator asinkron adalah fitur standar di JavaScript, memastikan kompatibilitas dengan pembaruan dan pustaka di masa mendatang.

Jika Anda baru menggunakan iterator asinkron, konsep berikut membantu memahami cara kerja penomoran halaman di Azure SDK untuk JavaScript.

  • Fungsi Asinkron: Fungsi yang mengembalikan Promise.
  • Generator: Fungsi yang dapat dijeda dan dilanjutkan, menghasilkan beberapa nilai.
  • Generator Asinkron: Gabungkan fitur fungsi asinkron dan generator untuk menghasilkan iterator asinkron.

Pustaka klien Azure menggunakan iterator asinkron untuk menangani kumpulan data yang berpotensi besar. Di bawah ini adalah contoh cara menggunakan iterator asinkron dengan berbagai layanan Azure.

Melakukan iterasi pada beberapa item

Jika kumpulan hasil Anda hanya beberapa item, Anda dapat mengulangi daftar kecil tersebut. Kode berikut melintasi sejumlah kecil kontainer di Azure Storage.

for await (const container of blobServiceClient.listContainers()) {
  console.log(`Container: ${container.name}`);
}

Mengiterasi data per halaman

Jika himpunan data Anda lebih besar, Anda mungkin ingin mengembalikan data di halaman, lalu mengulangi item di setiap halaman. Kode berikut melakukan iterasi data per halaman, kemudian setiap elemen.

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}`);
    }
  }
}

Lanjutkan perulangan

Jika Anda perlu memiliki lebih banyak kontrol atas perulangan, termasuk melanjutkan perulangan, gunakan token kelanjutan. Iterator paged juga mendukung melanjutkan dari token kelanjutan. Dalam contoh berikut, kami menggunakan token kelanjutan dari iterasi pertama untuk melanjutkan iterasi di halaman kedua.

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}`
  );

Sumber daya tambahan