我有一个带有 <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/