javascript - “AbortController”可以用作“removeEventListener”的功能替代品吗?
问题描述
我刚刚了解到,在现代浏览器中,可以通过AbortSignal永久取消事件处理程序。
这是一个小的概念验证(查看这支笔的演示):
let container = () => document.getElementById('container');
let cancelButton = () => document.getElementById('cancel');
function main() {
let controller = new AbortController();
let signal = controller.signal;
container().addEventListener("click", function() {
alert("I'm being clicked!!!");
}, {signal});
cancelButton().addEventListener("click", function() {
alert('Ha ha!!! Your yellow square event is cancelled!!!');
controller.abort();
container().innerText = "click me no more";
});
}
这行得通。但是,文档说明如下:
AbortController 接口表示一个控制器对象,允许您在需要时中止一个或多个 Web 请求。
也就是说,文档中没有任何地方指出:
- AbortController可以应用于任何任意事件(在文档中使用以下术语 - DOM 请求、Web 请求)。
- 其使用的后果与调用“removeEventListener”完全相同。
所以我的问题是 -我可以使用AbortController作为功能替代品removeEventListener
吗?
解决方案
根据 MDN 文档(options
参数 -> signal
) - 是的,您可以使用AbortSignal.abort()
以下替代方案removeEventListener
:
当调用给定的 AbortSignal 的 abort() 方法时,监听器将被移除。
推荐阅读
- python - Plotly:在 3D Cone 中设置颜色
- macos - 无法从我的 Mac 上的 Genero Studio 连接到 Virtual Box Linux 环境中的 Informix 数据库服务器设置
- android - Android Navigation java.language.IllegalStateException 片段类未设置
- c# - 我使用“HttpContext.Current”,但调试时出现错误“HttpContext”不包含“Current”的定义
- firebase - Firebase init - 错误:意外的规则格式.rules
- ssh - 浏览器可以通过 ssh(ssh 隧道)进行本地端口隧道吗?
- google-apps-script - 希望创建一个可以提出问题的 Google 表单
- php - 从 Drupal 的后台执行一个 php 脚本
- react-native - 目前关于将数据传递到标签导航以进行反应导航的共识是什么?
- c# - 从模板(.oft 文件)发送电子邮件 - 使用 C# 的 Exchange 服务