Rumah  >  Artikel  >  hujung hadapan web  >  Cara Mudah untuk Membatalkan Permintaan Ambil Apabila Anda Tidak Memerlukannya

Cara Mudah untuk Membatalkan Permintaan Ambil Apabila Anda Tidak Memerlukannya

WBOY
WBOYasal
2024-08-24 16:39:32883semak imbas

The Easy Way to Cancel Fetch Requests When You Don’t Need Them

Dalam blog ini, saya akan membimbing anda melalui langkah praktikal untuk membatalkan permintaan pengambilan menggunakan JavaScript, dengan tumpuan pada API AbortController. Pada akhirnya, anda akan mempunyai pemahaman yang jelas tentang cara menjadikan apl web anda lebih responsif dan mesra sumber.

Mengapa Anda Perlu Membatalkan Permintaan Ambil?

Membatalkan permintaan pengambilan adalah penting dalam senario di mana:

  • Pengalaman Pengguna: Apabila pengguna menavigasi keluar dari halaman, tidak perlu terus mengambil data untuk halaman tersebut.

  • Pengoptimuman Carian: Dalam ciri carian di mana setiap ketukan kekunci mencetuskan permintaan, adalah lebih cekap untuk membatalkan permintaan sebelumnya sebelum menghantar permintaan baharu.

  • Senario Tamat Masa: Sekiranya berlaku kelewatan rangkaian atau permintaan yang telah berjalan lama, anda mungkin mahu menetapkan tamat masa dan membatalkan permintaan jika ia melebihi tempoh tertentu.

Memahami AbortController

AbortController API menyediakan cara yang elegan untuk membatalkan permintaan pengambilan. Ia berfungsi dengan mencipta contoh AbortController, yang isyaratnya dihantar kepada permintaan pengambilan. Jika anda memanggil kaedah abort() pada pengawal, ia membatalkan permintaan.

Panduan Langkah demi Langkah untuk Membatalkan Permintaan Ambil

1. Persediaan Asas Menggunakan AbortController

Mari kita mulakan dengan contoh paling asas: mencipta AbortController dan membatalkan permintaan pengambilan.

// Step 1: Create an instance of AbortController
const controller = new AbortController();

// Step 2: Pass the signal to the fetch request
fetch('https://jsonplaceholder.typicode.com/posts', { signal: controller.signal })
    .then(response => response.json())
    .then(data => console.log('Data:', data))
    .catch(err => {
        if (err.name === 'AbortError') {
            console.log('Fetch request was canceled');
        } else {
            console.error('Fetch error:', err);
        }
    });

// Step 3: Cancel the fetch request
controller.abort();

2. Kes Penggunaan Praktikal: Membatalkan Permintaan pada Interaksi Pengguna
Satu senario biasa ialah membatalkan permintaan pengambilan sebagai tindak balas kepada interaksi pengguna. Sebagai contoh, apabila melaksanakan ciri carian, setiap ketukan kekunci mungkin mencetuskan permintaan pengambilan baharu. Membatalkan permintaan sebelumnya menghalang data lapuk atau tidak berkaitan daripada diproses.

let controller;

function search(query) {
    // Cancel the previous request if it exists
    if (controller) {
        controller.abort();
    }

    // Create a new controller for the new request
    controller = new AbortController();

    // Fetch data with the new controller
    fetch(`https://jsonplaceholder.typicode.com/posts?query=${query}`, { signal: controller.signal })
        .then(response => response.json())
        .then(data => console.log('Search results:', data))
        .catch(err => {
            if (err.name === 'AbortError') {
                console.log('Previous request canceled');
            } else {
                console.error('Fetch error:', err);
            }
        });
}

// Example usage: simulate user typing
search('React');
search('Vue'); // The request for 'React' is canceled

3. Melaksanakan Tamat Masa untuk Permintaan Ambil
Masa tamat adalah penting apabila berhadapan dengan keadaan rangkaian yang tidak boleh dipercayai. Menggunakan AbortController, anda boleh melaksanakan mekanisme tamat masa dengan mudah yang membatalkan permintaan pengambilan jika ia mengambil masa terlalu lama.

function fetchWithTimeout(url, timeout = 5000) {
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(), timeout);

    return fetch(url, { signal: controller.signal })
        .then(response => {
            clearTimeout(timeoutId);
            return response.json();
        })
        .catch(err => {
            if (err.name === 'AbortError') {
                console.log('Fetch request timed out');
            } else {
                console.error('Fetch error:', err);
            }
        });
}

// Example usage
fetchWithTimeout('https://jsonplaceholder.typicode.com/posts', 3000)
    .then(data => console.log('Data:', data));

Mengendalikan Pembatalan Permintaan Ambil Dengan Anggun

Apabila membatalkan permintaan pengambilan, penting untuk mengendalikannya dengan baik. Ini melibatkan membezakan antara ralat yang disebabkan oleh pembatalan dan jenis ralat lain.

fetch(url, { signal: controller.signal })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(err => {
        if (err.name === 'AbortError') {
            // Handle cancellation specifically
            console.log('Request was canceled');
        } else {
            // Handle other types of errors
            console.error('Request failed', err);
        }
    });

Atas ialah kandungan terperinci Cara Mudah untuk Membatalkan Permintaan Ambil Apabila Anda Tidak Memerlukannya. 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