javascript - 文件读取器 API : viewing the contents outside of a callback

标签 javascript html filereader

我一直在使用 FileReader API 来读取本地文件并将它们提供给 Java applet,目前这已经奏效了。文件被读取,applet 的行为就像它应该的那样。将文件内容(作为字符串)传递给小程序的函数目前在分配给阅读器的 onloadend() 事件的函数内部调用(我使用 onloadend() insteat 而不是 onload() 用于某些错误处理需要。虽然也许我可以用 try/catch 指令替换它,我会研究它)。现在我想将文件的内容传递给一个全局变量,以便也用 Javascript 解析它。问题是这似乎是不可能的,因为:

1) 文件加载后 FileReader 对象的 .result 成员为空(这是有道理的,看看读取器本身是异步的);

2) 如果我将 .result 成员复制到全局变量中,例如如果我这样做:

var my_string;

function load_callback()
{
   //Do some stuff...
   my_string = this.result;
}

...

my_reader = new FileReader();
my_reader.onloadend = load_callback;
my_reader.readAsText(my_file)
document.getElementById("empty_paragraph").innerHTML = my_string;

结果我得到了一个很好的undefined(这没有多大意义,真的)。 我应该怎么办?这是其他一些安全功能,使 FileReader 无法在其回调方法之外传播文件内容吗?在任何人提到它之前——是的,该文件已由用户正确提交(正如我所说,页面的其余部分有效);是的,我已经检查过名称 my_string 没有以任何方式重复;我已经在 Chromium 和 Firefox 上测试过了,所以它不依赖于浏览器。有人可以帮助我吗?

最佳答案

同步文件读取器仅在 WebWorker 上下文中可用,因为阻塞工作线程不会导致 UI 卡住。无论如何,无法在回调之外查看内容,除非您使用:

<script type="application/javascript;version=1.7"></script>

这只适用于 firefox。它允许您使用 yield 关键字,可用于实现 fibers可用于以同步方式编写异步代码。

关于javascript - 文件读取器 API : viewing the contents outside of a callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685409/

相关文章:

javascript - Meteor:在客户端使用 FileReader 上传图像文件,在服务器上使用 Npm.require ("fs")

java - Java FileReader 的问题

javascript - 如何在 jQuery 中选择一些元素作为选择器?

javascript - 我尝试过此控制台问题。 TypeError : Failed to execute 'appendChild' on 'Node' : parameter 1 is not of type 'Node'

javascript - 在 javascript 中使用 angular.js 的数据绑定(bind)/或更新事件上的 javascript 变量

html - CSS 悬停不显示

javascript - 生成的函数

javascript - 基于 id 列表从对象中获取值的有效方法

javascript - 如何使用 javascript 检查是否对服务器进行了调用

reactjs - 使用 window.FileReader REACT 上传多个文件