欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript接口防止重復(fù)請求的方法總結(jié)

 更新時間:2024年12月25日 10:17:00   作者:我就不思  
在前端開發(fā)中,防止重復(fù)請求是一個常見的問題,重復(fù)請求不僅會增加服務(wù)器的負載,還可能導(dǎo)致數(shù)據(jù)不一致等問題,本文為大家整理了一些常用的解決方法,需要的可以參考下

摘要:

在前端開發(fā)中,防止重復(fù)請求是一個常見的問題。重復(fù)請求不僅會增加服務(wù)器的負載,還可能導(dǎo)致數(shù)據(jù)不一致等問題!

1、使用防抖(Debounce)或節(jié)流(Throttle)

防抖(Debounce):在用戶停止觸發(fā)某個事件一定時間后執(zhí)行函數(shù)。例如,用戶頻繁點擊按鈕時,只有最后一次點擊會觸發(fā)請求。

function debounce(func, wait) {
    let timeout;
    return function() {
        const context = this;
        const args = arguments;
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(context, args), wait);
    };
}

// 使用方法
const debouncedFetch = debounce((url) => fetch(url), 300);
debouncedFetch('https://api.example.com/data');

節(jié)流(Throttle):規(guī)定在一個單位時間內(nèi),只能觸發(fā)一次函數(shù)執(zhí)行。如果在同一個單位時間內(nèi)多次觸發(fā)函數(shù),只有一次生效。

function throttle(func, limit) {
    let lastFunc;
    let lastRan;
    return function() {
        const context = this;
        const args = arguments;
        if (!lastRan) {
            func.apply(context, args);
            lastRan = Date.now();
        } else {
            clearTimeout(lastFunc);
            lastFunc = setTimeout(function() {
                if (Date.now() - lastRan >= limit) {
                    func.apply(context, args);
                    lastRan = Date.now();
                }
            }, limit - (Date.now() - lastRan));
        }
    };
}

???????// 使用方法
const throttledFetch = throttle((url) => fetch(url), 2000);
throttledFetch('https://api.example.com/data');

2、使用標志位(Flag)來防止重復(fù)請求

通過設(shè)置一個標志位,在請求進行中時阻止后續(xù)請求。

let isFetching = false;

function fetchData(url) {
    if (isFetching) return;
    isFetching = true;

???????    fetch(url)
        .then(response => response.json())
        .then(data => {
            // 處理返回的數(shù)據(jù)
        })
        .catch(error => {
            console.error('Error:', error);
        })
        .finally(() => {
            isFetching = false;
        });
}

3、使用 AbortController

AbortController 允許你在需要的時候中止請求。

const controller = new AbortController();
const signal = controller.signal;

function fetchData(url) {
    fetch(url, { signal })
        .then(response => response.json())
        .then(data => {
            // 處理返回的數(shù)據(jù)
        })
        .catch(error => {
            if (error.name === 'AbortError') {
                console.log('Fetch aborted');
            } else {
                console.error('Error:', error);
            }
        });
}

???????// 在需要中止請求的地方調(diào)用 controller.abort()
controller.abort();

4、使用第三方庫(如 Axios 和 Redux-Saga)

如果你在使用 Axios 或 Redux-Saga,可以利用這些庫提供的中間件功能來實現(xiàn)防止重復(fù)請求。

Axios Cancel Token

Axios 支持取消請求的功能,可以通過 CancelToken 實現(xiàn)。

const axios = require('axios');
const CancelToken = axios.CancelToken;
let cancel;

???????function fetchData(url) {
    if (cancel) {
        cancel('Operation canceled due to new request.');
    }
    cancel = null;
    const source = CancelToken.source();
    axios.get(url, { cancelToken: source.token })
        .then(response => {
            // 處理返回的數(shù)據(jù)
        })
        .catch(thrown => {
            if (axios.isCancel(thrown)) {
                console.log('Request canceled', thrown.message);
            } else {
                console.error('Error:', thrown);
            }
        });
}

總結(jié)

以上是幾種常見的防止重復(fù)請求的方法,可以根據(jù)具體場景選擇合適的方法。防抖和節(jié)流適用于頻繁觸發(fā)的事件,標志位和 AbortController 適用于需要手動控制請求的情況,而第三方庫則提供了更強大的功能和靈活性。

到此這篇關(guān)于JavaScript接口防止重復(fù)請求的方法總結(jié)的文章就介紹到這了,更多相關(guān)JavaScript接口防止重復(fù)請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解babel是如何將class語法糖轉(zhuǎn)換為es5的語法

    詳解babel是如何將class語法糖轉(zhuǎn)換為es5的語法

    這篇文章主要詳細介紹了babel是如何將class語法糖轉(zhuǎn)換為es5的語法,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Javascript對象Clone實例分析

    Javascript對象Clone實例分析

    這篇文章主要介紹了Javascript對象Clone用法,實例分析了javascript對象克隆的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • TypeScript聲明文件的語法與場景詳解

    TypeScript聲明文件的語法與場景詳解

    使用ts進行開發(fā)的時候,不可避免的需要引用第三方的 JS 的庫,但是默認情況下TS是不認識我們引入的這些JS庫的,所以在使用這些JS庫的時候,我們就要通過聲明文件告訴TS它是什么,這篇文章主要給大家介紹了關(guān)于TypeScript聲明文件的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • js 判斷瀏覽器類型 去全角、半角空格 自動關(guān)閉當(dāng)前窗口

    js 判斷瀏覽器類型 去全角、半角空格 自動關(guān)閉當(dāng)前窗口

    去全角、半角空格 自動關(guān)閉當(dāng)前窗口等實現(xiàn)函數(shù)。
    2009-04-04
  • JS是按值傳遞還是按引用傳遞

    JS是按值傳遞還是按引用傳遞

    在分析這個問題之前,我們需了解什么是按值傳遞(call by value),什么是按引用傳遞(call by reference)。在計算機科學(xué)里,這個部分叫求值策略(Evaluation Strategy)。它決定變量之間、函數(shù)調(diào)用時實參和形參之間值是如何傳遞的。
    2015-01-01
  • 讀Javascript高性能編程重點筆記

    讀Javascript高性能編程重點筆記

    這篇文章主要介紹了讀Javascript高性能編程重點筆記,需要的朋友可以參考下
    2016-12-12
  • 分享一道關(guān)于閉包、bind和this的面試題

    分享一道關(guān)于閉包、bind和this的面試題

    這篇文章主要給大家介紹了一道關(guān)于閉包bind、this的面試題,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 將Sublime Text 3 添加到右鍵中的簡單方法

    將Sublime Text 3 添加到右鍵中的簡單方法

    下面小編就為大家分享一篇將Sublime Text 3 添加到右鍵中的簡單方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • js定時器實例分享

    js定時器實例分享

    本篇文章主要介紹了js 定時器的語法、實例、與實現(xiàn)代碼分析。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • asp知識整理筆記3(問答模式)

    asp知識整理筆記3(問答模式)

    這是關(guān)于asp知識整理的第二份筆記,只有把最基礎(chǔ)的問題搞清楚了,才能更好的學(xué)習(xí)ASP編程。
    2015-09-09

最新評論