最后,关于stackoverflow的第一个问题。我可以向你保证,我已经搜索了相关的答案,但没有人适合我的问题。我现在正在学习JavaScript,有.NET和C ++的背景,但是我无法让这段代码完成我的期望。我在这里复制了许多版本中的一个版本,可能会有一个可疑的return语句位置,但也许你可以帮我解决这个问题。
function readFile(file) {
var reader = new FileReader();
reader.onload = readSuccess;
function readSuccess(evt) {
var text = evt.target.result;
return text;
};
reader.readAsText(file);
}
我在这里尝试的是读取一个通过带有type =“file”的标签输入在HTML中加入的文件。 一切都在代码内部完成。我使用Chrome控制台和Firebug来捕获函数返回到控制台中的变量,如:
var x = readFile(aFile);
我得到的是一条'未定义'的消息。 使用断点,我可以在return语句中看到文本内容并正确填充!但是文字没有退回! 我已经看到了相关的问题,但是他们使用innerHTML以及我不想在这里做的其他类型的技巧解决问题,因为这个函数的结果应该被另一个JS函数使用,而不是更新任何DOM的一部分。
非常感谢你的时间。
答案 0 :(得分:1)
你得到undefined
,因为那是readFile(aFile)
返回的内容(即什么都没有)。就像事件监听器一样,有各种方法可以获取事件数据,其中一种方法是回调。这是您的代码修改为使用一个:
function readFile(file, cb) {
var reader = new FileReader();
reader.onload = readSuccess;
function readSuccess(evt) {
cb(evt.target.result)
};
reader.readAsText(file);
}
var x;
readFile(aFile, function (data) {
x = data;
});
我添加了函数readFile
的第二个参数,当读取文件并传入数据时,将调用该参数。所有变量赋值都在回调内完成。
至于获得类似结果的其他方法,还有promises和generators,但您可能应首先了解JS异步基础知识。