JavaScript FileReader()和可能的返回或关闭问题

JavaScript FileReader()和可能的返回或关闭问题,javascript,filereader,Javascript,Filereader,最后,我的第一个问题是关于stackoverflow。我可以向你保证,我已经找到了相关的答案,但没有一个适合我的问题。我现在正在学习JavaScript,有.NET和C++背景,但是我不能得到这段代码来做我所期望的。我在这里复制了许多版本中的一个,返回语句的位置可能有问题,但也许你可以帮我解决这个问题 function readFile(file) { var reader =

最后,我的第一个问题是关于stackoverflow。我可以向你保证,我已经找到了相关的答案,但没有一个适合我的问题。我现在正在学习JavaScript,有.NET和C++背景,但是我不能得到这段代码来做我所期望的。我在这里复制了许多版本中的一个,返回语句的位置可能有问题,但也许你可以帮我解决这个问题

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的任何部分


非常感谢您的时间。

您将获得未定义的
,因为这是
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
的第二个参数,当读取文件并将数据传递到其中时,将调用该参数。所有变量赋值都要在回调函数中完成


至于实现类似结果的其他方法,还有和,但您可能应该首先了解JS异步基础知识。

这是回调函数中的
return
语句,而不是
readFile
中的return语句。你不能-它是异步的!非常感谢你。它起作用了。现在我决定寻找资源来理解这种编程。再次感谢。