Javascript 将fileReader的内容存储在变量中
试着做一些我喜欢的事情应该是相对直接的 我只想读取文本文件内容并将其存储在变量中 这是我的密码:Javascript 将fileReader的内容存储在变量中,javascript,Javascript,试着做一些我喜欢的事情应该是相对直接的 我只想读取文本文件内容并将其存储在变量中 这是我的密码: readToCSV(file) { // console.log(file); let cat = ""; var reader = new FileReader(); reader.onloadend = function (event) { if (event.target.readyState == FileReader.DONE) {
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函数中嵌套任何进一步的处理。这似乎很愚蠢 我只想读取文本文件内容并将其存储在变量中 按照您当前的操作方式,
cat
将是一个空字符串,因为FileReader是异步的
我会回电话
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
中嵌套进一步的处理希望有帮助 好的,所以我找到了一个解决办法,想为任何试图将文件内容转换成可验证文件的人发布它(说真的,为什么这么难呢) 不管怎样,我最终用一个承诺来包装读者,并将其存储起来 无论如何,新代码如下:
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);
});
};
FileReader API是异步的,这意味着以您尝试的方式将数据加载到该变量(即
cat
)或从该变量读取数据是不可能的“我是否只需要在onloadend函数中嵌套任何进一步的处理。这似乎很愚蠢”就是这样做的方法。这就是JavaScript的本质。