成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Axios如何取消請(qǐng)求,其原理是什么?

開發(fā) 前端
Axios 取消請(qǐng)求的原理是基于底層網(wǎng)絡(luò)請(qǐng)求庫(如 XMLHttpRequest 或 Fetch)提供的中止機(jī)制。當(dāng)調(diào)用取消令牌的 cancel 方法時(shí),Axios 會(huì)觸發(fā)中止底層的網(wǎng)絡(luò)請(qǐng)求,從而終止正在進(jìn)行的請(qǐng)求過程。

axios 可以通過創(chuàng)建一個(gè) CancelToken 來取消一個(gè)請(qǐng)求,基本原理是:

  1. 創(chuàng)建一個(gè) CancelToken 的實(shí)例,它有一個(gè) executor 函數(shù),可以通過調(diào)用 executor 參數(shù)中的 cancel 函數(shù)來取消請(qǐng)求。
  2. 在 axios 請(qǐng)求配置中指定 cancelToken 屬性,將 CancelToken 實(shí)例傳遞進(jìn)去。
  3. 當(dāng)我們需要取消請(qǐng)求時(shí),調(diào)用 CancelToken 實(shí)例的 cancel() 方法即可取消對(duì)應(yīng)的請(qǐng)求。
  4. axios 檢測(cè)到配置的 cancelToken 被取消,就會(huì)取消掉這個(gè)請(qǐng)求,并在錯(cuò)誤回調(diào)中返回一個(gè) Cancel 錯(cuò)誤。axios 內(nèi)部會(huì)監(jiān)聽 cancelToken 實(shí)例的 cancel 信號(hào),一旦觸發(fā)就會(huì)跳出隊(duì)列,取消對(duì)應(yīng)請(qǐng)求的執(zhí)行。示例代碼:
js
const CancelToken = axios.CancelToken;
const source = CancelToken.source();


axios.get('/user', {
  cancelToken: source.token
}).catch(function(thrown) {
  if(axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // 處理錯(cuò)誤
  }
});


// 取消請(qǐng)求
source.cancel('Operation canceled by the user.');

vue、React項(xiàng)目中如何取消

在基于 React 或 Vue 的應(yīng)用中,可以通過封裝 Axios 并結(jié)合組件的狀態(tài)管理來實(shí)現(xiàn)取消請(qǐng)求的功能。下面分別介紹在 React 和 Vue 中如何實(shí)現(xiàn)這一點(diǎn)。

在 React 中的實(shí)現(xiàn):

  1. 創(chuàng)建一個(gè)封裝的 Axios 實(shí)例,以便于應(yīng)用中的多個(gè)組件共享相同的配置和取消令牌。
// axiosInstance.js
import axios from 'axios';


const instance = axios.create();


export default instance;
  1. 在組件中使用這個(gè)封裝的 Axios 實(shí)例,并結(jié)合組件的狀態(tài)管理來處理取消請(qǐng)求的邏輯。
// YourComponent.js
import React, { useState } from 'react';
import axiosInstance from './axiosInstance';


function YourComponent() {
  const [loading, setLoading] = useState(false);
  const [data, setData] = useState(null);


  const source = axiosInstance.CancelToken.source();


  const fetchData = async () => {
    try {
      setLoading(true);
      const response = await axiosInstance.get('/api/some-endpoint', {
        cancelToken: source.token
      });
      setData(response.data);
      setLoading(false);
    } catch (error) {
      if (axiosInstance.isCancel(error)) {
        console.log('請(qǐng)求被取消:', error.message);
      } else {
        // 處理其他錯(cuò)誤
      }
      setLoading(false);
    }
  };


  const cancelRequest = () => {
    source.cancel('請(qǐng)求被用戶取消');
  };


  return (
    <div>
      {loading ? <p>Loading...</p> : <p>{data}</p>}
      <button onClick={fetchData}>Fetch Data</button>
      <button onClick={cancelRequest}>取消請(qǐng)求</button>
    </div>
  );
}


export default YourComponent;

在 Vue 中的實(shí)現(xiàn):

  1. 創(chuàng)建一個(gè)封裝的 Axios 實(shí)例,同樣可以讓多個(gè)組件共享相同的配置和取消令牌。
// axiosInstance.js
import axios from 'axios';


const instance = axios.create();


export default instance;
  1. 在組件中使用這個(gè)封裝的 Axios 實(shí)例,并結(jié)合組件的狀態(tài)管理來處理取消請(qǐng)求的邏輯。
<template>
  <div>
    <p v-if="loading">Loading...</p>
    <p v-else>{{ data }}</p>
    <button @click="fetchData">Fetch Data</button>
    <button @click="cancelRequest">取消請(qǐng)求</button>
  </div>
</template>


<script>
import axiosInstance from './axiosInstance';


export default {
  data() {
    return {
      loading: false,
      data: null,
      source: axiosInstance.CancelToken.source()
    };
  },
  methods: {
    async fetchData() {
      try {
        this.loading = true;
        const response = await axiosInstance.get('/api/some-endpoint', {
          cancelToken: this.source.token
        });
        this.data = response.data;
        this.loading = false;
      } catch (error) {
        if (axiosInstance.isCancel(error)) {
          console.log('請(qǐng)求被取消:', error.message);
        } else {
          // 處理其他錯(cuò)誤
        }
        this.loading = false;
      }
    },
    cancelRequest() {
      this.source.cancel('請(qǐng)求被用戶取消');
    }
  }
};
</script>

原理

Axios 取消請(qǐng)求的原理是基于底層網(wǎng)絡(luò)請(qǐng)求庫(如 XMLHttpRequest 或 Fetch)提供的中止機(jī)制。當(dāng)調(diào)用取消令牌的 cancel 方法時(shí),Axios 會(huì)觸發(fā)中止底層的網(wǎng)絡(luò)請(qǐng)求,從而終止正在進(jìn)行的請(qǐng)求過程。

具體來說,以下是 Axios 取消請(qǐng)求的原理:

  1. 創(chuàng)建 CancelToken 對(duì)象: 在發(fā)起請(qǐng)求之前,可以通過 axios.CancelToken.source() 方法創(chuàng)建一個(gè) CancelToken 對(duì)象,并獲取其中的 token。這個(gè) token 是一個(gè)用于標(biāo)識(shí)該請(qǐng)求的令牌。
  2. 關(guān)聯(lián) CancelToken: 將創(chuàng)建的 CancelToken 對(duì)象中的 token 關(guān)聯(lián)到請(qǐng)求的配置中,通過 cancelToken 參數(shù)。這告訴 Axios 在取消令牌觸發(fā)時(shí)要取消這個(gè)請(qǐng)求。
  3. 取消請(qǐng)求: 當(dāng)想要取消請(qǐng)求時(shí),調(diào)用 CancelToken 對(duì)象中的 cancel 方法,并提供一個(gè)取消的原因。這會(huì)觸發(fā) Axios 內(nèi)部的邏輯,導(dǎo)致底層的網(wǎng)絡(luò)請(qǐng)求被中止。
  4. 捕獲取消錯(cuò)誤: 如果請(qǐng)求在取消前已經(jīng)發(fā)出,Axios 會(huì)拋出一個(gè)名為 Cancel 的錯(cuò)誤。可以使用 axios.isCancel(error) 來檢查是否是取消錯(cuò)誤。在 .catch 部分處理這個(gè)取消錯(cuò)誤。

底層 XMLHttpRequest 和 Fetch API 都提供了終止請(qǐng)求的機(jī)制。當(dāng)取消請(qǐng)求時(shí),Axios 會(huì)調(diào)用底層網(wǎng)絡(luò)請(qǐng)求的相應(yīng)中止方法,例如 xhr.abort() 或 fetch.abort(),從而使網(wǎng)絡(luò)請(qǐng)求停止并拋出取消錯(cuò)誤。這個(gè)機(jī)制允許有效地取消正在進(jìn)行的請(qǐng)求,避免不必要的數(shù)據(jù)傳輸和處理。

責(zé)任編輯:武曉燕 來源: 海燕技術(shù)棧
相關(guān)推薦

2024-08-27 08:55:32

Axios底層網(wǎng)絡(luò)

2021-04-06 06:01:11

AxiosWeb 項(xiàng)目開發(fā)

2021-04-22 05:37:14

Axios 開源項(xiàng)目HTTP 攔截器

2012-02-15 14:12:58

開源軟件政府

2021-04-12 05:55:29

緩存數(shù)據(jù)Axios

2021-07-27 14:50:15

axiosHTTP前端

2018-11-26 14:55:33

固態(tài)硬盤SSD選購

2023-11-05 10:52:54

DNS服務(wù)器瀏覽器

2025-01-15 13:30:48

FeignHTTPJava

2024-06-05 08:42:24

2018-06-14 10:32:25

2021-10-21 09:40:50

AI人工智能

2021-12-09 17:14:05

戴爾

2024-11-25 12:20:00

Hystrix微服務(wù)架構(gòu)

2021-09-10 06:50:03

HashMapHash方法

2019-08-14 14:56:52

無服務(wù)器云原生FaaS

2020-12-03 08:14:45

Axios核心Promise

2024-01-11 08:53:58

2021-09-27 08:02:17

CDN加速網(wǎng)站網(wǎng)絡(luò)

2021-02-02 18:02:09

java對(duì)象數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜激情影院 | 爱爱综合网 | 成年人网站免费 | 91玖玖| 成年人视频在线免费观看 | 欧美日本韩国一区二区 | 亚洲精品日韩在线 | 色综合久久久久 | 国产精品久久久久久 | 国产精品久久久久久久久久久久久 | 国产成人在线免费 | 亚洲网站在线观看 | 国产精品久久久久久久久免费高清 | 久久蜜桃av一区二区天堂 | 亚洲精品免费视频 | 中文字幕在线观看成人 | 国产精品乱码一区二区三区 | 欧美一区二区三区高清视频 | 中文字幕韩在线第一页 | 黄色一级免费看 | 免费看一级毛片 | av一区二区在线观看 | 国产在线视频一区二区董小宛性色 | 午夜久久久 | www.性色 | 国产一区二区三区精品久久久 | 国产精品一区二区久久 | 久久91精品国产一区二区三区 | 天天曰夜夜操 | 国产一区免费 | 国产目拍亚洲精品99久久精品 | 中文字幕成人av | 午夜精品一区二区三区在线观看 | 中文字幕免费在线 | 欧美精品91 | 国产在线观看一区二区 | 欧美一区二区三区在线播放 | 国产精品亚洲综合 | 97人人澡人人爽91综合色 | 久久国产99| 国产日韩欧美精品一区二区 |