首页 > 解决方案 > “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 请求。

也就是说,文档中没有任何地方指出:

  1. AbortController可以应用于任何任意事件(在文档中使用以下术语 - DOM 请求、Web 请求)。
  2. 其使用的后果与调用“removeEventListener”完全相同。

所以我的问题是 -我可以使用AbortController作为功能替代品removeEventListener吗?

标签: javascriptdom-events

解决方案


根据 MDN 文档options参数 -> signal) - 是的,您可以使用AbortSignal.abort()以下替代方案removeEventListener

当调用给定的 AbortSignal 的 abort() 方法时,监听器将被移除。


推荐阅读