I'm trying to read a file using FileReader:
async readFile(event: any) {
var file = event.target.files[0];
var data:string
if (file) {
var reader:FileReader = new FileReader();
reader.onload = async function (evt : FileReaderEvent) {
data = await evt.target.result;
console.log(evt.target.result);
};
console.log(file);
console.log(data);
await reader.readAsText(file);
await this.processFileContent(data);
}
}
However, evt.target.result still gets printed after my console.log(file) call.
Does anyone know how I can obtain the result of the file and pass it to my processFileContent function?
Understanding FileReaderThe FileReader methods work asynchronously but don't return a Promise. And attempting to retrieve the result immediately after calling a method will not work, as the . onload event handler fires only after the FileReader has successfully finished reading the file and updates the FileReader's .
Use the new read methods on the blob itself
/** @type {Event} evt */
async readFile (evt) {
const [file] = evt.target.files
if (!file) return
const data = await file.text()
return this.processFileContent(data)
}
Alternative:
evt.target.files[0]?.text().then(this.processFileContent)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With