Rumah > hujung hadapan web > tutorial js > Cara menggunakan Promise.race untuk menambah tamat masa untuk mengambil panggilan

Cara menggunakan Promise.race untuk menambah tamat masa untuk mengambil panggilan

Mary-Kate Olsen
Lepaskan: 2024-12-01 18:18:11
asal
358 orang telah melayarinya

How to use Promise.race to add timeout to fetch calls

API pengambilan sangat berguna untuk membuat permintaan rangkaian, tetapi ia tidak disertakan dengan ciri tamat masa terbina dalam. Ini bermakna apl anda mungkin digantung selama-lamanya jika rangkaian perlahan atau pelayan tidak bertindak balas.

Nasib baik JavaScript ialah bahasa serba boleh, berpusat pada pengaturcaraan dipacu acara, menyediakan satu set fungsi utiliti yang dikumpulkan dalam objek Promise. Menggunakan kaedah Promise.race, kami boleh membuat mekanisme tamat masa untuk panggilan pengambilan kami. Dengan cara ini, kami boleh memastikan aplikasi kami responsif, walaupun perkara tidak berjalan seperti yang dirancang dengan rangkaian.

Jadi, saya akan membimbing anda tentang cara melaksanakan tamat masa ini menggunakan Promise.race. Kami akan mulakan dengan contoh pengambilan mudah dan kemudian meningkatkannya dengan menambahkan tamat masa. Saya juga akan berkongsi senario dunia sebenar di mana kami berurusan dengan token CSRF untuk menunjukkan kepada anda cara kaedah ini berfungsi dalam konteks yang selamat.

Anggap kita ada ini:

// Prepare fetch options
const options = {
    method: method,
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'X-CSRF-TOKEN': csrfToken
    },
    body: JSON.stringify({items})
};

// Make the fetch request
const response = await fetch(fetchUrl, options);
Salin selepas log masuk

Jika kami ingin menambah mekanisme tamat masa untuk diambil, kami boleh membuat janji dengan tamat masa yang mencetuskan penolakan. Janji menggunakan Promise.race, untuk menjalankan pelbagai janji dan apabila seseorang selesai dengan penolakan atau azam, menghentikan semua yang lain.

// Timeout mechanism for fetch
const fetchWithTimeout = (url, options, timeout = 5000) => {
    return Promise.race([
        fetch(url, options),
        new Promise((_, reject) => setTimeout(() => reject(new Error('Request timed out')), timeout))
    ]);
};

// Make the fetch request
const response = await fetchWithTimeout(fetchUrl, options);
Salin selepas log masuk

Berikut ialah contoh dunia sebenar dengan token CSRF

// Validate CSRF token
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.content;
if (!csrfToken) {
    throw new Error('CSRF token not found in the document.');
}

// Prepare fetch options
const options = {
    method: method,
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'X-CSRF-TOKEN': csrfToken
    },
    body: JSON.stringify({items})
};

// Timeout mechanism for fetch
const fetchWithTimeout = (url, options, timeout = 5000) => {
    return Promise.race([
        fetch(url, options),
        new Promise((_, reject) => setTimeout(() => reject(new Error('Request timed out')), timeout))
    ]);
};

// Make the fetch request
const response = await fetchWithTimeout(fetchUrl, options);
Salin selepas log masuk

Atas ialah kandungan terperinci Cara menggunakan Promise.race untuk menambah tamat masa untuk mengambil panggilan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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