Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mencegah Permintaan API Berlebihan Apabila Menggunakan Async/Await dalam JavaScript?
Menggabungkan Fungsi Async, Tunggu dan setTimeout
Menggunakan ciri async JavaScript terkini, panduan ini menyediakan penyelesaian kepada isu prestasi biasa: menghantar permintaan yang berlebihan kepada Google API dalam jangka masa yang singkat. Matlamatnya adalah untuk memperkenalkan fungsi tidur untuk melambatkan permintaan dan meningkatkan prestasi skrip.
Kod Asal:
Kod awal ini menggunakan corak async/menunggu dengan cekap:
async function asyncGenerator() { while (goOn) { var fileList = await listFiles(nextPageToken); var parents = await requestParents(fileList); } }
Masalah:
Kod melaksanakan gelung while terlalu pantas, mengakibatkan limpahan permintaan kepada API Google.
Percubaan Penyelesaian:
Untuk menangani perkara ini, fungsi tidur telah dicipta:
async function sleep(fn, par) { return await setTimeout(async function() { await fn(par); }, 3000, fn, par); }
Walau bagaimanapun, fungsi ini gagal mengembalikan respons permintaan dengan betul.
Pelaksanaan Betul:
Isu dengan fungsi tidur terletak pada kekurangan janji yang dikembalikan oleh setTimeout. Untuk menyelesaikan masalah ini, versi yang dijanjikan boleh dibuat:
function timeout(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function sleep(fn, ...args) { await timeout(3000); return fn(...args); }
Gelung Dioptimumkan:
Untuk memperlahankan pelaksanaan gelung, fungsi tidur yang menjeda keseluruhan pengiraan tidak optimum. Pendekatan yang lebih baik ialah menggunakan konstruk Promise.all yang merangkumi fungsi tidur:
while (goOn) { var [parents] = await Promise.all([ listFiles(nextPageToken).then(requestParents), timeout(5000) ]); }
Pengubahsuaian ini memastikan pengiraan ibu bapa mengambil masa sekurang-kurangnya 5 saat, memperlahankan gelung secara berkesan dan mencegah API yang berlebihan permintaan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Permintaan API Berlebihan Apabila Menggunakan Async/Await dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!