Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengawal Kadar Permintaan API Dengan Berkesan Menggunakan Async/Await dan setTimeout?

Bagaimana untuk Mengawal Kadar Permintaan API Dengan Berkesan Menggunakan Async/Await dan setTimeout?

Susan Sarandon
Susan Sarandonasal
2024-12-27 17:38:11592semak imbas

How to Effectively Control the Rate of API Requests Using Async/Await and setTimeout?

Gabungan Fungsi Async Awaiit setTimeout

Dalam coretan kod ini, fungsi asyncGenerator cuba menggunakan ciri async-wait untuk memproses senarai fail daripada Google API. Walau bagaimanapun, gelung while dilaksanakan terlalu cepat, mengakibatkan permintaan API yang berlebihan sesaat. Untuk menangani perkara ini, pembangun cuba memperkenalkan fungsi tidur, listFiles, untuk melengahkan permintaan API.

Fungsi tidur direka bentuk untuk menangguhkan pelaksanaan fungsi listFiles sebanyak 3000 milisaat. Walau bagaimanapun, kod itu tidak berfungsi seperti yang dimaksudkan. Isunya terletak pada fungsi setTimeout, yang tidak secara asalnya mengembalikan janji yang boleh ditunggu.

Untuk menyelesaikan isu ini, anda perlu menjanjikan fungsi setTimeout melalui fungsi pembantu tamat masa:

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

Selain itu, fungsi tidur boleh diubah suai untuk menggunakan pembantu tamat masa fungsi:

async function sleep(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}

Sebagai alternatif, untuk memperlahankan gelung while tanpa menggunakan fungsi tidur berasaskan panggil balik, pendekatan berikut boleh digunakan:

while (goOn) {
  // other code
  var [parents] = await Promise.all([
      listFiles(nextPageToken).then(requestParents),
      timeout(5000)
  ]);
  // other code
}

Pendekatan ini memastikan pengiraan ibu bapa mengambil masa sekurang-kurangnya 5 saat, dengan berkesan memperlahankan gelung.

Atas ialah kandungan terperinci Bagaimana untuk Mengawal Kadar Permintaan API Dengan Berkesan Menggunakan Async/Await dan setTimeout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn