javascript - FileReader readAsText() 异步问题?

标签 javascript html

我已经实现了以下代码来通过 <input type="file" /> 解析 CSV选择:

export async function parse(file: File) {
  let content = '';
  const reader = new FileReader();
  reader.onload = function(e: any) {
    content = e.target.result;
  };
  await reader.readAsText(file);
  const result = content.split(/\r\n|\n/);
  return result;
}

如果我运行这段代码并在我声明 result 的行上放置一个断点,它成功地检索了文件的内容。如果我不放置任何断点,则内容为空。如您所见,我添加了 await到阅读器将文件作为文本读取的行,但它仍然无法正常工作。

最佳答案

await 在这里没有帮助。 readAsText() doesn't return a Promise .

您需要将整个过程包装在 Promise 中:

export function parse(file: File) {
  // Always return a Promise
  return new Promise((resolve, reject) => {
    let content = '';
    const reader = new FileReader();
    // Wait till complete
    reader.onloadend = function(e: any) {
      content = e.target.result;
      const result = content.split(/\r\n|\n/);
      resolve(result);
    };
    // Make sure to handle error states
    reader.onerror = function(e: any) {
      reject(e);
    };
    reader.readAsText(file);
  });
}

关于javascript - FileReader readAsText() 异步问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51026420/

相关文章:

javascript - Speak.js – 只执行一个命令

javascript - Angular Material DatePicker 日历显示在 Angular Modal 后面

javascript - 如何检查数组是否是 Javascript 中的空数组的数组

jquery - jQuery和HTML 5 <audio>

javascript - 如何将网页中的字符串输入作为 Java 对象传递给 @RestController?

html - 如何使用 Div 或 SVG 形状制作响应式装饰样式,它触及页面的左上边缘到页面的右下角

javascript - 查询 : Disabled 'input' field not available in form

javascript - Angularjs 指令未显示

html - CSS: display: inline-flex 和 text-overflow: ellipsis 不能一起工作

javascript - 在 z 轴上将图像夹在子对象和父对象之间