如何判断JavaScript中FileReader是否完成文件读取?
FileReader 读取完成判断与 result 可用性说明
- 首先明确:FileReader 的
load事件本身就是在文件完全读取完成后才触发的,只要进入这个事件的回调函数,你就可以直接从reader.result获取完整的文件文本,不需要额外判断loaded和total的关系。 - 你在
progress事件里通过e.loaded === e.total来判断完成是可行的,但这属于用进度事件来做完成判断,不如直接监听load事件来得直接和规范——毕竟load事件就是专门为读取成功完成这个场景设计的。 - 关于
ProgressEvent的loaded和total:loaded代表已读取的字节数,total是文件的总字节数,正常读取流程中loaded只会小于等于total,所以total/loaded的比值是≥1的(只有完成时等于1)。但反过来,只有当e.loaded === e.total(或者比值等于1)时,才能确定读取完全完成,因为只要还有字节没读完,loaded就会小于total。
给你一个更简洁规范的fileToStr实现示例:
function fileToStr(file, callback) { const reader = new FileReader(); reader.onload = () => callback(null, reader.result); reader.onerror = (e) => callback(e.error); reader.readAsText(file); }
额外提醒:如果读取过程中出现错误,会触发error事件而不会触发load,所以建议同时监听error事件处理异常情况。
内容的提问来源于stack exchange,提问作者Hairi
相关产品推荐
相关产品推荐

