javascript - 完成后是否需要删除 FileReader() 的事件侦听器?
问题描述
我有一个组件<input type='file'/>
可以选择图像并将其上传到我的存储桶。
我正在使用FileReader().readAsText(file);
which 是异步的,我正在设置监听器来监听onload
andonerror
事件。
来自: 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 次。
注意:这是一个添加博客帖子和帖子图像的页面。
解决方案
不,没有必要。最终,阅读器和函数将仅相互引用¹,但其他任何一个都不会引用它们中的任何一个,因此它们都可以被垃圾收集。
¹ 如果 JavaScript 引擎优化了那些闭包,很多人都这样做了,那么只有reader
对函数的引用,而不是反过来,你编写它们的方式。
推荐阅读
- mysql - 使用第一个查询的结果作为第二个查询中的变量触发
- android-studio - 在 Android Studo 中添加文本框
- postgresql - Postgres 在文本字段中转义单引号和双引号
- c# - 无法从 .net core Web 应用程序调用 .net core 进程
- salesforce - 当列中存在重复值时添加唯一索引
- python-3.x - 如何防止 QTableWidget 中没有选择?
- java - Ormlite 保存错误的日期,具体取决于一天中的时间
- python - 将xml转json结构后增加json中某个节点的值
- spring - DelegatingFilterProxy 如何知道调用哪个过滤器来委托 doFilter 调用?
- android - 如何根据用户是否发送消息来对齐 RecyclerView 中的消息