尝试做一些我觉得应该相对直接的事情。
我只想读取一个文本文件的内容并将其存储在一个变量中。
下面是我的代码:
readToCSV(file) {
// console.log(file);
let cat = "";
var reader = new FileReader();
reader.onloadend = function (event) {
if (event.target.readyState == FileReader.DONE) {
var data = event.target.result;
}
console.log("data:", data)
cat = data;
};
reader.readAsText(file)
console.log("cat:",cat);
};
我已经尝试了几乎所有的方法,但在函数之外一直没有定义。我是否只需要在onloadend函数中嵌套任何进一步的处理。这看起来很愚蠢。
发布于 2018-11-04 19:55:51
我只想读取一个文本文件的内容,并将其存储在一个变量中。
按照您目前的做法,由于FileReader的异步特性,cat
将是一个空字符串。
我会用一个回调函数来做。
var cat = '';
const reader = new FileReader();
reader.readAsText(document.querySelector('input[type="file"]').files[0]);
reader.onload = () => storeResults(reader.result);
function storeResults(result) {
cat = result;
}
这样,您就可以完成工作,而不必直接在onloadend
中嵌套进一步的处理。
希望这能有所帮助!
发布于 2018-11-04 19:57:26
好了,我找到了一份工作,并想把它发布给任何想要把fileContents变成可验证的人(说真的,这有什么难的)
无论如何,我最终将阅读器包装在一个promise中并将其存储起来。
无论如何,新代码如下:
async handleFileUpload(e){
console.log("e",e)
await this.setState({file:e[0]})
console.log("state: ",this.state.file)
const fileContents = await this.readToText(this.state.file)
console.log("fc:",fileContents);
//await this.readToCSV(fileContents)
}
async readToText(file) {
const temporaryFileReader = new FileReader();
return new Promise((resolve, reject) => {
temporaryFileReader.onerror = () => {
temporaryFileReader.abort();
reject(new DOMException("Problem parsing input file."));
};
temporaryFileReader.onload = () => {
resolve(temporaryFileReader.result);
};
temporaryFileReader.readAsText(file);
});
};
https://stackoverflow.com/questions/53144428
复制