【发布时间】:2020-10-15 05:47:10
【问题描述】:
我正在尝试制作一个简单的 csv 到 JSON 转换器(只是为了练习),但我还没有找到任何方法来从 FileReader() 函数中获取数据并返回。我不知道这是否可能。
那么下面的代码做了什么:它只是抓取一个 csv 文件,并在按下按钮后尝试运行一个将其转换为数组的函数(到目前为止)。打印数组的是console.log,它可以正常工作,但是如果我想返回这个数组以便可以将它传递给另一个函数怎么办?每当我使用 return csvArray; 然后而不是运行试图 console.log(fileToArray(fileinput)); 的函数时,我得到未定义。我没有在网上找到任何关于这个使用香草 JS 的内容。
const fileinput = document.querySelector("#csvfile").files[0];
const convertBtnFile = document.querySelector("#convertBtn");
convertBtnFile.addEventListener("click", (e) => {
e.preventDefault();
fileToArray(fileinput);
});
const fileToArray = (csvFile) => {
const myFile = new FileReader();
myFile.onload = (event) => {
const wholeText = event.target.result;
const splitLines = wholeText.split(/\r\n|\n/);
csvArray = splitLines.map(i => i.split(","));
console.log(csvArray);
}
myFile.readAsText(csvFile);
}
<input type="file" id="csvfile" /><br/> <button type="button" id="convertBtn">Convert</button>
【问题讨论】:
-
how the heck I should know that FilreRead() is async- 好吧,文档的第一行是:FileReader 对象让 Web 应用程序异步读取文件的内容 .. .. 1.Which part of your 5000 word general answer- 适用于您的代码的部分 .... 3.Guys like you make StackOverflow not a friendly place for novice programmers.- 您已经成为会员 7 年了...所以,您不是新手:p -
你的函数
fileToArray不能返回内容,但是,通过添加一个回调参数,你可以调用一个你调用console.log(csvArray);的函数 - 这就是内容可用 -
const fileinput = document.querySelector("#csvfile").files[0]为时过早。你需要const fileinput = document.querySelector("#csvfile");然后点击使用fileinput.files[0] -
@JaromandaX,我知道。该问题已关闭是有原因的,并且 SO 的政策没有理由重新发布相同的问题。这应该关闭并删除。如果 OP 认为重复项没有回答他们的问题,他们可以改进他们的第一个问题
标签: javascript filereader