Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mencegah Permintaan API Berlebihan Apabila Menggunakan Async/Await dalam JavaScript?

Bagaimanakah Saya Boleh Mencegah Permintaan API Berlebihan Apabila Menggunakan Async/Await dalam JavaScript?

Susan Sarandon
Lepaskan: 2024-12-15 12:34:11
asal
373 orang telah melayarinya

How Can I Prevent Excessive API Requests When Using Async/Await in 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);
    }
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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)
    ]);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan