了解Papaparse与本地文件

时间:2019-01-02 19:50:11

标签: javascript papaparse

我正在尝试了解如何使用本地文件正确实现Papaparse。我看了很多在线资源,他们采用的方法是这样

loadTextFromFile (event) {
    if (!event.target.files[0]) {
        alert('Upload a file.')
    } else {
        let file = event.target.files[0];
        if (file) {
            let reader = new FileReader();
            let config = {
                delimiter: "",
                newline: "",
                quoteChar: '"',
                escapeChar: '"',
                header: true,
                trimHeaders: false
            };

            reader.onload = e => this.$emit('load', Papa.parse(event.target.result, config));
            reader.onload = function (event) {
                let results = Papa.parse(event.target.result, config);
                console.log('PAPA RESULT: ', results.data);
                console.log('ROWS:', event.target.result);
            };
            reader.readAsText(file);

        } else {
            alert('Please select a file to upload.')
        }
    }
}

因此他们使用FileReader,并且似乎直到readAsText中的结尾才加载文件。但是,尽管我仍然需要完全理解代码,但是上面的示例仍然可以完美地工作。

然后还有其他示例,这些示例似乎不需要FileReader即可

loadTextFromFile (event) {
    if (!event.target.files[0]) {
        alert('Upload a file.')
    } else {
        let file = event.target.files[0];
        if (file) {
            Papa.parse(file, {
                header: true,
                dynamicTyping: true,
                complete: function(results) {
                    console.log(results.data)
                }
            });

        } else {
            alert('Please select a file to upload.')
        }
    }
}

再一次,它可以完美运行。因此,我试图理解的是为什么人们有时会使用FileReader,也许还要解释第一个示例中到底发生了什么。

我应该使用什么选项?

谢谢

1 个答案:

答案 0 :(得分:1)

第一个示例似乎并没有什么意义,他们分配了reader.onload两次,因此甚至没有使用执行$emit事情的第一个分配。

我想说第一个例子有点草率和不必要。使用您自己的FileReader的唯一原因是:

  1. 渴望学习如何使用FileReader API,
  2. 出于某种原因需要自定义FileReader
  3. 想知道加载文件需要多长时间以及Papa解析内容需要多长时间

我通常会忽略第一个示例,并坚持使用Papa文档中更干净,更简单的示例。