使用 filereader 时,必须监听 onerror 事件来捕获异步错误。该对象不支持 promise 或 try...catch 语法,因此无法通过常规同步代码块包裹来拦截读取失败。

FileReader 的 onerror 事件如何触发?
当文件读取过程中发生系统级或权限类错误时,FileReader 会触发 error 事件并调用 onerror 回调函数。此时可以通过 reader.error.code 属性获取具体的错误码,例如 1 代表用户中断操作,2 代表安全策略限制。

const reader = new FileReader();
reader.onload = (event) => {
console.log('Success:', event.target.result);
};
reader.onerror = () => {
console.error('Error code:', reader.error.code);
console.error('Error message:', reader.error.message);
};
// 假设 file 是一个有效的 File 对象
reader.readAsText(file);
为什么 try...catch 无法捕获 readAsText 的错误?
readAsText 方法本身是同步执行的,它仅负责启动异步任务。如果该方法抛出异常(如参数类型错误),try...catch 可以捕获;但如果是读取过程中的运行时错误(如文件被删除),则属于异步范畴,必须在 onerror 中处理。

const reader = new FileReader();
try {
// 这里的调用是同步的,不会抛出异步错误
reader.readAsText(invalidInput);
} catch (e) {
console.log('Sync Error:', e);
}
// 异步错误只能通过事件捕获
reader.onerror = () => {
console.log('Async Error occurred');
};
在 onloadend 中如何判断是否发生了错误?
为了确保无论成功还是失败都能执行清理逻辑,可以使用 onloadend 事件。在该回调中,通过检查 reader.error 是否存在来判断当前状态。如果 reader.error 不为空,说明读取过程出现了异常,此时应优先处理错误信息而非结果数据。
const reader = new FileReader();
reader.onloadend = () => {
if (reader.error) {
console.error('Read failed with code:', reader.error.code);
} else {
console.log('Read completed successfully');
}
};
reader.readAsText(file);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











