首页 > 解决方案 > 完成后是否需要删除 FileReader() 的事件侦听器?

问题描述

我有一个组件<input type='file'/>可以选择图像并将其上传到我的存储桶。

我正在使用FileReader().readAsText(file);which 是异步的,我正在设置监听器来监听onloadandonerror事件。

来自: https ://developer.mozilla.org/en-US/docs/Web/API/FileReader

使用 addEventListener() 或通过将事件侦听器分配给此接口的 oneventname 属性来侦听这些事件。

每次用户选择文件时都会运行。我正在计算一个md5哈希值以用作fileName存储中的。

if (newFile !== undefined && newFile !== null) {
  md5Hash = await new Promise((resolve,reject) => {

    const reader = new FileReader();

    reader.onload = (event) => {
      console.log('md5 calculated!');
      const binary = event.target.result;
      resolve(md5(binary));
    };

    reader.onerror = (event) => {
      reject(event.target.result);
    };
    
    reader.readAsText(newFile);
    
  });
}

完成这些听众后,我是否需要费心移除它们?这是一个好的做法还是没有这样做的意义?

对于我在同一页面上传的不同图像,该代码可能会运行 5 或 6 次。

注意:这是一个添加博客帖子和帖子图像的页面。

标签: javascriptfilereader

解决方案


不,没有必要。最终,阅读器和函数将仅相互引用¹,但其他任何一个都不会引用它们中的任何一个,因此它们都可以被垃圾收集。


¹ 如果 JavaScript 引擎优化了那些闭包,很多人都这样做了,那么只有reader对函数的引用,而不是反过来,你编写它们的方式。


推荐阅读