将文件内容传递给外部变量

Ron*_*Ron 7 javascript filereader

我正在使用 FileReader 和 HTML 文件对话框来读取脚本中的文件。如何将此文件的内容传递到 FileReader.onload 函数之外?

function readFileData(evt) {
  var file = evt.target.files[0];
  var reader = new FileReader();

  reader.onload = function(e) {
    var contents = e.target.result;
  }
  reader.readAsText(file);
}
document.getElementById('file').addEventListener
    ('change', readFileData, false);

/* I want to access the contents here */
Run Code Online (Sandbox Code Playgroud)

我尝试在 readFileData 和 onload 函数中粘贴返回值,但我不确定它们返回什么。

小智 3

我想你知道,这async一切。

所以,简短的回答是:不,你不能这样做。

但是,如果您希望将来的任何调用都可以全局访问内容,您可以这样做:-

var contents;// declared `contents` outside
function readFileData(evt) {
  var file = evt.target.files[0];
  var reader = new FileReader();

  reader.onload = function(e) {
    contents = e.target.result; //<-- I removed the `var` keyword
  }
  reader.readAsText(file);
}

document.getElementById('file').addEventListener('change', readFileData, false);

var reasonableTimeToWaitForFileToLoad = 100000;

console.log(contents); //`contents` access first attempt: prints undefined



setTimeout(function() {
  console.log(contents);//`contents` access second attempt: prints the contents 'may be if the time allows.'
}, reasonableTimeToWaitForFileToLoad);
Run Code Online (Sandbox Code Playgroud)