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

javascript `AbortController`

AbortController 浏览器内置的api,常用于控制被取消的异步操作。
常见用途时取消fetch() 请求, Streams、 Websocket

她包含两个主要部分:

  • controller 对象: 用来创建和触发 取消操作
  • signal 对象: 传递给目标api,让她知道何时需要终止。

基本用法

	const controller = new AbortController()const signal = controller.signal;// zai. fetch() zhong 使用fetch(`https://....`, { signal }).then(res => res.json()).then(data => console.log(data)).catch(err=>{if(err.name === "AbortError"){console.log('请求已被取消');}else {console.error('请求出错:', err);}})// x 秒后取消请求setTimeOut(()=>{controller.abort()
},x)

fetch 开始请求

x 秒后调用 controller.abort()

fetch 会抛出一个 AbortError,我们在 .catch() 中捕获

属性/方法说明
new AbortController()创建一个控制器实例
.signal读属性,返回一个 AbortSignal 对象
.abort(reason?)触发取消操作,可以传入自定义原因
AbortSignal.aborted布尔值,表示是否已被中止
AbortSignal.reason获取传给 abort() 的原因
AbortSignal.addEventListener("abort", handler)监听中止事件

多个任务可以共享 取消信号

	 const controller = new AbortController()const options = { signal: controller.signal }Promise.all([fetch("https://...", options),fetch("https://...", options),]).catch((err)=>{if(err.name === "AbortError"){console.log('所有请求被取消');}})// 只要调用一次,所有请求都会取消controller.abort();

自定义异步任务

自定义任务取消

  function doSomeTasks(signal) {return  new Promise((resolve,reject)=>{const timer = setTimeOut(()=>{ resolve('任务完成了。。。') },5000)signal.addEventListener('abort', ()=> {clearTimeout(timer)reject(new Error('任务被取消了。。。。'))})})}const  controller = new AbortController()doSomeTasks(controller.signal).catch(err => console.log(err.message))// 1s 后取消setTimeOut(()=>{ controller.abort();},1000)
http://www.dtcms.com/a/394370.html

相关文章:

  • 时间复杂度与空间复杂度
  • rocketmq队列和消费者关系
  • RAG评估指南:从核心指标到开源框架,打造高效检索生成系统
  • xtuoj 0x05-A 前缀和
  • 防误删 (实时) 文件备份系统 (btrfs 快照 + rsync)
  • 【FreeRTOS】第七课(1):任务间通信(使用队列)
  • OD C卷 - 二叉树计算
  • DiffDock 环境安装和使用教程
  • NVIC中的不可屏蔽中断NMI(Non-Maskable Interrupt)是什么?
  • TypeORM 浅析
  • 2.4 死锁 (答案见原书 P165)
  • 算法与数据结构:常见笔试题总结
  • trae使用playwright MCP方法流程
  • anaconda安装tensorflow遇到的一个错误
  • 不同浏览器对 http.server 提供MP4 文件支持差异分析
  • Python 实战:内网渗透中的信息收集自动化脚本(10)
  • leetcode 206 反转链表
  • AI智能的网站SEO优化服务商
  • 生产者客户端
  • Puppeteer 在爬取电商 JavaScript 页面的使用
  • 2015/12 JLPT听力原文 问题四
  • 【设计模式】备忘录模式
  • STM32_07_按键
  • 基于迁移学习和SqueezeNet的滚动轴承故障诊断(MATLAB)
  • 实战项目(十二:《AI画质增强与LED驱动控制:一场关于‘创造’与‘还原’的对话》):从LED冬奥会、奥运会及春晚等大屏,到手机小屏,快来挖一挖里面都有什么
  • 开发避坑指南(52):IDEA 2025.1.3 顶部显示类完整路径的设置方法
  • 安装Qt新之后出现两本帮助手册
  • Rust_2025:阶段1:day7.2unsafe , 链接相关
  • 【论文速递】2025年第15周(Apr-06-12)(Robotics/Embodied AI/LLM)
  • 设计模式简单说明:责任链与规则树