在使用 FileReader 时,我们经常需要使用异步/等待机制来确保文件读取完成后再执行后续操作。然而,有时在使用 Async/await 时,可能会出现“TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'”这样的错误。
解决此问题的方法是将 await 前面的代码放到一个函数中,并将 FileReader 作为函数参数传递。然后,在函数中创建一个 Promise,并在 FileReader 的 onloadend 事件中 resolve 这个 Promise。最后,在 await 后面使用此 Promise。
以下是一个使用 Async/await 和 FileReader 读取文本文件的示例代码:
function readFileAsync(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsText(file);
});
}
async function handleFile(file) {
const fileContent = await readFileAsync(file);
console.log(fileContent);
}
const inputElement = document.querySelector('input[type="file"]');
inputElement.addEventListener('change', () => {
const file = inputElement.files[0];
handleFile(file);
});