使用abortcontroller作为删除活动听众的替代方案
自2017年推出以来, AbortController
提供了一种取消fetch()
请求的强大机制。该功能超出了简单的API调用,提供了用于管理活动听众的优雅解决方案,尤其是在诸如拖放互动之类的场景中。
一个简单的示例演示了取消fetch()
请求:
const Controller = new AbortController(); const res = fetch('/',{signal:controller.signal}); controller.abort(); console.log(res); // =>承诺(被拒绝):“ domexception:用户中止请求”
AbortController
还改善了超时处理,为setTimeout
提供了更清洁的替代方法:
功能超时(持续时间,信号){ 返回新的承诺((分辨率,拒绝)=> { const handle = settimeout(解析,持续时间); 信号?.addeventListener('abort',()=> { cleartimeout(handle); 拒绝(新错误(“流产”)); }); }); } // 用法 const Controller = new AbortController(); const Promise =超时(10000,Controller.Signal); controller.abort(); console.log(Promise); // =>承诺(被拒绝):“错误:中止”
然而,重大进步在于Chrome 88对addEventListener
中AbortSignal
的支持。这允许一种简化的方法同时删除多个事件侦听器,从而取代了多个removeEventListener
调用的需求。
考虑一个拖放示例。以前,管理mousedown
, mousemove
和mouseup
事件需要使用removeEventListener
明确删除:
//使用RemoveEventListener el.AddeventListener('Mousedown',e => { if(e.buttons!== 1)返回; const onMouseMove = e => { if(e.buttons!== 1)返回; /* 工作 */ }; const onMouseUp = e => { if(E.Buttons&1)返回; Window.RemoveEventListener('Mousemove',OnMouseMove); window.removeEventListener('MouseUp',onMouseUp); }; Window.AddeventListener('Mousemove',OnMouseMove); Window.AddeventListener('MouseUp',onMouseUp); });
使用AbortController
,一个abort()
呼叫可干净地删除所有相关的听众:
//使用abortcontroller el.AddeventListener('Mousedown',e => { if(e.buttons!== 1)返回; const Controller = new AbortController(); window.addeventlistener('Mousemove',e => { if(e.buttons!== 1)返回; /* 工作 */ },{信号:controller.signal}); window.addeventListener('MouseUp',e => { if(E.Buttons&1)返回; controller.abort(); },{信号:controller.signal}); });
目前,只有Chrome 88完全支持与addEventListener
AbortSignal
集成。虽然其他浏览器支持AbortController
,但此特定功能尚未广泛实现。多填充可用于更广泛的兼容性。
以上是使用abortcontroller作为删除活动听众的替代方案的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

您是否曾经在项目上需要一个倒计时计时器?对于这样的东西,可以自然访问插件,但实际上更多

在元素个数不固定的情况下如何通过CSS选择第一个指定类名的子元素在处理HTML结构时,常常会遇到元素个数不�...

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

格子呢是一块图案布,通常与苏格兰有关,尤其是他们时尚的苏格兰语。在Tartanify.com上,我们收集了5,000多个格子呢
