Vue3中AbortController取消請求的用法詳解

在 Vue3 中,AbortController?用于取消?fetch?請求,避免組件卸載后仍執行異步操作導致的潛在問題(如內存泄漏或更新已銷毀組件的狀態)。以下是詳細用法和最佳實踐:


一、基本用法

  1. 創建?AbortController?實例
    在組件?setup()?中創建實例,并通過?signal?關聯請求:

    javascript

    import { onUnmounted } from 'vue';export default {setup() {const controller = new AbortController();const signal = controller.signal;// 發送請求時傳遞 signalfetch('/api/data', { signal }).then(response => response.json()).catch(err => {if (err.name === 'AbortError') {console.log('請求已取消');} else {console.error('請求失敗:', err);}});// 組件卸載時取消請求onUnmounted(() => controller.abort());return {};},
    };

二、結合異步操作

在異步函數中結合?AbortController

javascript

import { onUnmounted } from 'vue';export default {setup() {const controller = new AbortController();const fetchData = async () => {try {const response = await fetch('/api/data', { signal: controller.signal });const data = await response.json();// 處理數據} catch (err) {if (err.name === 'AbortError') {console.log('請求已取消');} else {console.error('請求失敗:', err);}}};fetchData();onUnmounted(() => controller.abort());},
};

三、管理多個請求

單個?AbortController?可取消多個請求:

javascript

const controller = new AbortController();// 請求1
fetch('/api/data1', { signal: controller.signal });// 請求2
fetch('/api/data2', { signal: controller.signal });// 取消所有請求
controller.abort();

四、與 Axios 結合使用

如果使用 Axios,可通過?CancelToken(舊版)或?AbortController(Axios >= 0.22.0)取消請求:

javascript

import axios from 'axios';const controller = new AbortController();axios.get('/api/data', {signal: controller.signal,
}).then(response => { /* ... */ }).catch(err => {if (axios.isCancel(err)) {console.log('請求已取消');}});// 取消請求
controller.abort();

五、注意事項

  1. 兼容性
    AbortController?在現代瀏覽器中支持良好,但需考慮舊版瀏覽器兼容性(可通過?polyfill?解決)。

  2. 錯誤處理
    捕獲?AbortError?避免未處理的 Promise 拒絕。

  3. 復用 Controller
    每次新請求前創建新的?AbortController,避免重復使用已取消的實例。


六、最佳實踐

  • 在組件卸載時取消請求:在?onUnmounted?生命周期鉤子中調用?abort()

  • 封裝可復用的邏輯:將取消邏輯封裝到自定義 Hook 中(如?useFetch)。

  • 避免內存泄漏:確保所有未完成的請求在組件銷毀時被取消。


通過合理使用?AbortController,可以有效管理 Vue3 中的異步操作,提升應用性能和穩定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78521.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78521.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78521.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【刷題Day26】Linux命令、分段分頁和中斷(淺)

說下你常用的 Linux 命令? 文件與目錄操作: ls:列出當前目錄的文件和子目錄,常用參數如-l(詳細信息)、-a(包括隱藏文件)cd:切換目錄,用于在文件系統中導航m…

Spring Boot 參考文檔導航手冊

📚 Spring Boot 參考文檔導航手冊 🗺? ? 新手入門 👶 1?? 📖 基礎入門:概述文檔 | 環境要求 | 安裝指南 2?? 🔧 實操教程:上篇 | 下篇 3?? 🚀 示例運行:基礎篇 …

卷積神經網絡(CNN)詳細教程

卷積神經網絡(CNN)詳細教程 一、引言 卷積神經網絡(Convolutional Neural Networks, CNN)是一種深度學習模型,廣泛應用于圖像識別、視頻分析、自然語言處理等領域。CNN通過模擬人類視覺系統的層次結構,能夠…

解決SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的問題

問題描述: 在pip安裝第三方庫時,出現SSL的問題。 傳輸層安全性協議(TLS)及其前身安全套接層(SSL)是現在的 HTTPS 協議中的一種安全協議,目的是為互聯網通信提供安全及數據完整性保障。而較新版…

SpringBoot程序的創建以及特點,配置文件,LogBack記錄日志,配置過濾器、攔截器、全局異常

目錄 一、創建一個SpringBoot程序 二、SpringBoot的特點 ①主要特點 ②其他特點 ③熱部署 啟動熱部署 關閉熱部署 三、SpringBoot的配置文件 ①SpringBoot三種配置文件的格式(以設置端口號為例): ②配置文件的優先級 ③常見配置項 1…

i18n-ai-translate開源程序,可以使用DeepSeek等模型將您的 i18nJSON翻譯成任何語言

一、軟件介紹 文末提供程序和源碼下載 i18n-ai-translate開源程序使用 DeepSeek等模型可以將您的 i18n JSON 翻譯成任何語言。 無縫翻譯本地化文件。支持嵌套翻譯文件的目錄。需要i18next樣式的JSON 文件(文末一并提供下載)。 二、模式 CSV 模式 三個…

Flask + ajax上傳文件(一)--單文件上傳

一、概述 本教程將教你如何使用Flask后端和AJAX前端實現文件上傳功能,包含完整的代碼實現和詳細解釋。 二、環境準備 1. 所需工具和庫 Python 3.xFlask框架jQuery庫Bootstrap(可選,用于美化界面)2. 安裝Flask pip install flask三、項目結構 upload_project/ ├── a…

如何在 Postman 中,自動獲取 Token 并將其賦值到環境變量

在 Postman 中,你可以通過 預請求腳本(Pre-request Script) 和 測試腳本(Tests) 實現自動獲取 Token 并將其賦值到環境變量,下面是完整的操作步驟: ? 一、創建獲取 Token 的請求 通常這個請求…

北斗導航 | 基于Transformer+LSTM+激光雷達的接收機自主完好性監測算法研究

基于Transformer+LSTM+激光雷達的接收機自主完好性監測算法研究 接收機自主完好性監測(RAIM)是保障全球導航衛星系統(GNSS)定位可靠性的核心技術。傳統RAIM算法依賴最小二乘殘差法,存在故障漏檢、對復雜環境適應性差等問題。結合Transformer、LSTM與激光雷達的多模態融合…

基于Python爬蟲的豆瓣電影信息爬取(可以根據選擇電影編號得到需要的電影信息)

# 豆瓣電影信息爬蟲(展示效果如下圖所示:) 這是一個功能強大的豆瓣電影信息爬蟲程序,可以獲取豆瓣電影 Top 250 的詳細信息。 ## 功能特點 - 自動爬取豆瓣電影 Top 250 的所有電影信息 - 支持分頁獲取,每頁 25 部電影,共 10 頁 - 獲取每部電影的詳細信息,包括: - 標題…

Ubuntu22.04/24.04 P104-100 安裝驅動和 CUDA Toolkit

硬件環境 使用一塊技嘉 B85m-DS3H 安裝 P104-100, CPU是帶集成顯卡的i5-4690. 先在BIOS中設置好顯示設備優先使用集成顯卡(IGX). 然后安裝P104-100開機. 登入Ubuntu 后查看硬件信息, 檢查P104-100是否已經被檢測到 # PCI設備 lspci -v | grep -i nvidia lspci | grep NVIDIA …

東南亞與中東小游戲市場出海調研報告

東南亞與中東小游戲市場出海調研報告 目標市場篩選與概況 (The Gaming Market in Southeast Asia (SEA) | Allcorrect)圖:2018–2027年東南亞主要國家游戲市場收入(億美元)趨勢。到2024年東南亞游戲市場規模預計將接近300億美元 (2024年東南亞手游市場怎么樣? - 快出海問…

力扣4-最長公共前綴

一.題目 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴,返回空字符串 ""。 示例 1: 輸入:strs ["flower","flow","flight"] 輸出:"fl"示例 2&…

設計模式和單一原則筆記

單一原則:方法 對象 策略模式:方法實現 // 策略接口(單一職責:定義計算規范) public interface PriceStrategy {boolean match(String type); // 職責1:判斷是否適用該策略double calculate(double pric…

常見正則表達式整理與Java使用正則表達式的例子

一、常見正則表達式整理 1. 基礎驗證類 郵箱地址 ^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\\.[a-zA-Z]{2,}$ (匹配如 userexample.com)手機號 ^1[3-9]\\\\d{9}$ (匹配國內11位手機號,如 13812345678)中文字符 ^[\u4e00-\u9fa5…

vue2 項目的 vscode 插件整理

Folder Selector 當項目文件很多時,查找一個文件,可能需要在資源管理器中不斷的滾動再打開文件夾查找文件,很麻煩,這個可以增加一個面板通過右鍵文件夾選擇 然后在面板中查看文件 Reveal Button 文件中跳轉到另一個文件時&#…

使用 Node、Express 和 MongoDB 構建一個項目工程

本文將詳細介紹如何使用 Node.js Express MongoDB 構建一個完整的 RESTful API 后端項目,涵蓋: 項目初始化 Express 服務器搭建 MongoDB 數據庫連接 REST API 設計(CRUD 操作) 錯誤處理與中間件 源碼結構與完整代碼 部署建…

如何實現Spring Boot應用程序的安全性:全面指南

在現代 Web 開發中,安全性是 Spring Boot 應用程序的核心需求,尤其是在微服務、云原生和公開 API 場景中。Spring Boot 結合 Spring Security 提供了一套強大的工具,用于保護應用程序免受常見威脅,如未經授權的訪問、數據泄露、跨…

無人機避障——Mid360+Fast-lio感知建圖+Ego-planner運動規劃(胎教級教程)

電腦配置:Xavier-nx、ubuntu 18.04、ros melodic 激光雷達:Livox_Mid-360 結果展示:左邊Mid360+Fast-lio感知建圖,右邊Ego-planner運動規劃 1、讀取雷達數據并顯示 無人機避障——感知篇(采用Livox-Mid360激光雷達獲取點云數據顯示)-CSDN博客 看看雷達數據話題imu以及…

數據庫證書可以選OCP認證嗎?

直接回答:國內OCP認證持有者的年薪普遍在15萬到40萬元之間,具體收入與經驗、地區和行業強相關。OCP認證能大幅提升求職競爭力,但薪資天花板仍由個人能力決定。 一、薪資范圍和核心影響因素 OCP認證是Oracle數據庫領域的中高級“技術通行證”…