javascript - 完成后是否需要删除 FileReader() 的事件监听器?

标签 javascript filereader

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

我正在使用 FileReader().readAsText(file);这是异步的,我设置为 onload 的监听器和 onerror事件。

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

Listen to these events using addEventListener() or by assigning an event listener to the oneventname property of this interface.

每次用户选择文件时运行。我正在计算 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 次。

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

最佳答案

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


¹ 如果 JavaScript 引擎优化了这些闭包(很多人都这样做),那么只有 reader 可以引用这些函数,而不是相反,按照您编写它们的方式。

关于javascript - 完成后是否需要删除 FileReader() 的事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497788/

相关文章:

javascript - 如何在浏览器中使用JavaScript从&lt;input type ="file"/>获取curl -T --upload-data选项的等效数据格式?

JavaScript 文档.域 : Chrome and Firefox return different

javascript - 如何在 vue-router 模板上绑定(bind)事件

javascript - 在提交表单时,检查准备上传的文件的大小?

JavaScript readAsDataurl 不是函数

java - 如何将文件中的十六进制值读取到字节数组中?

javascript - Jquery 动画宽度缓动是突然的

javascript - Jquery $.each 在 $.each 中使用 setTimeout

javascript - 相对路径不起作用,但绝对路径起作用

Java fileReader - 在 String 之后读取 int