当前位置: 首页 > news >正文

中止 Web 请求新方式 - AbortController API

AbortController 是一个 JavaScript API,用于中止一个或多个 Web 请求。它最初是 Fetch API 的一部分,但现在已成为一个独立的接口,可以用于其他异步任务。

AbortController 是 Web 标准的一部分,由 WHATWG 制定,是现代浏览器原生支持的 API。

核心用途

AbortController 的主要作用是提供一种标准化的方式来取消正在进行的异步操作,比如:

  • 取消 fetch 请求

  • 中止 XMLHttpRequest

  • 停止其他异步任务

  • 清理事件监听器

示例1:基础使用

const controller = new AbortController();axios.get('https://api.example.com/data', {signal: controller.signal
}).then(response => console.log(response.data)).catch(error => {if (error.name === 'CanceledError') {console.log('请求已取消');} else {console.error('其他错误:', error);}});// 取消请求
controller.abort();

示例2:多个相关请求的取消

class DataFetcher {constructor() {this.mainController = null;}async fetchUserData(userId) {// 取消之前的用户数据请求if (this.mainController) {this.mainController.abort();}this.mainController = new AbortController();const signal = this.mainController.signal;try {// 并行发起多个相关请求const [user, posts, friends] = await Promise.all([this.fetchUser(userId, signal),this.fetchUserPosts(userId, signal),this.fetchUserFriends(userId, signal)]);return { user, posts, friends };} catch (error) {if (error.name !== 'AbortError') {throw error;}}}async fetchUser(userId, signal) {const response = await fetch(`/api/users/${userId}`, { signal });return response.json();}async fetchUserPosts(userId, signal) {const response = await fetch(`/api/users/${userId}/posts`, { signal });return response.json();}async fetchUserFriends(userId, signal) {const response = await fetch(`/api/users/${userId}/friends`, { signal });return response.json();}
}

兼容性处理

// 简单的 polyfill
if (typeof AbortController === 'undefined') {class AbortController {constructor() {this.signal = new AbortSignal();}abort() {this.signal.aborted = true;if (this.signal.onabort) {this.signal.onabort();}}}class AbortSignal {constructor() {this.aborted = false;this.onabort = null;}}window.AbortController = AbortController;
}

END.

http://www.dtcms.com/a/423667.html

相关文章:

  • 做微商如何网站推广需要外包团队做网站怎么提需求
  • 在JavaScript / Node.js中,SQLite异步查询函数实现
  • 数据结构:Map 和 Set (二)
  • 服务网站安徽省建设厅网站备案
  • 从零到一构建现代化 C# 在线编程环境:SharpPad 技术架构深度解析
  • Golang指针的基本概念
  • WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
  • 辽宁手机版建站系统开发平面设计学徒
  • 福州做网站制作北京楼市暴跌
  • PG 中 .psqlrc 配置文件使用案例
  • Linux开发——中断
  • 【快乐数六】2022-11-21
  • redis单线程模型
  • 松江新桥网站建设东莞做网站首选企业铭
  • 【Leetcode hot 100】46.全排列
  • C++版搜索与图论算法
  • 天津做网站排名企业网站建设的价格
  • Nginx 反向代理、负载均衡与 Keepalived 高可用
  • nginx upstream的作用
  • BeaverTails数据集:大模型安全对齐的关键资源与实战应用
  • 归并排序、计数排序以及各种排序稳定性总结
  • 【数据结构+算法】迭代深度搜索(IDS)及其时间复杂度和空间复杂度
  • OpenSpeedy下载 - 全平台网盘提速加速工具|官网入口
  • 关于在博客页面添加live2d-widget的一些心得和踩过的坑
  • 2025年,今后需要进步的方面
  • 有哪些做平面设计好素材网站自学it怎么入门
  • Android16 adb投屏工具Scrcpy介绍
  • 酵母展示技术如何重塑酶工程?从定向进化到工业催化的突破
  • 广汉做网站立白内部网站
  • 【FPGA+DSP系列】——(3)中断学习(以定时器中断为例)