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的本质。