Javascript 文件读取器 : Extracting text

标签 javascript scope filereader

我在保存从 FileReader 读取的文件中提取的数据时遇到问题。

onload 函数的范围内数据似乎存在,但试图将所述数据存储在范围外的变量中似乎不起作用。

MWE: http://jsfiddle.net/eqaw0hbf/1/

(上传任何文本文件,你就会明白我的意思)

最佳答案

我倾向于说 onload 函数是异步的。换句话说,它会在加载结束时触发并仅执行“function(e){}”作用域(因此得名“onloadend”)。与此同时,“function(e){}”范围之外的其余程序将在等待加载结束时继续执行。这并不是说数据没有存储在文本变量中。只是第 14 行的“alert(text)”调用发生在“function(e){}”作用域有机会将“text”变量设置为空以外的其他值之前。

您的代码将开始并执行第 2-3 行,然后跳转到第 10 行(并打印 alert(text) ,它只是 ""因为函数 (e) 从未执行过,因此 text 从未设置为任何内容) .当“lr.onloadend”的服务器或请求最终接收到它的数据时,您的程序将跳回到第 6 行并执行 lr.onloadend = function(e){} 内的范围并设置文本变量。

您应该做的是将任何依赖于文本的数据处理放在 onload 的回调中,在此范围内:lr.onloadend = function(e){}。基本上只要你有一个异步函数,内部发生的任何事情都应该假定发生在任何更高范围内的所有代码之后。任何不在“回调”函数内的东西都会按照您期望的顺序正常执行。回调函数内的任何事情都只有在回调被触发时才会发生。所以你不能让回调函数外的事情依赖于回调函数内发生的事情。无法保证在任何时候都可以“触发”的异步回调中设置的信息可以在其他任何地方使用。

此链接很好地解释了 Node.js/Javascript 中的回调:

http://cwbuecheler.com/web/tutorials/2013/javascript-callbacks/

关于Javascript 文件读取器 : Extracting text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28438912/

相关文章:

java - Android Studio - 如何从文本文件中读取(行)?

javascript - Html5 filereader - 读取本地 Json Array 文件并仅显示特定部分

javascript - 为什么我不能在不使用字符串的情况下将 Dog Face (u+1f436) 字段添加到我的对象?

JavaScript 范围内的 eval,未定义的值

c# - 如何更改 Ninject 中现有绑定(bind)的范围

mysql - Node JS 嵌套函数和变量作用域

使用 mocha 的 javascript 测试 html5 文件 api?

javascript - 如何在 Sequelize.js 中撤消软删除

javascript - 如何使用 node.js 查看 phantomjs 子进程的标准输出?

javascript - 为什么我的组件在更改状态后没有重新呈现?