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

时间:2014-02-12 03:53:15

标签: javascript filereader

最后,关于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的一部分。

非常感谢你的时间。

1 个答案:

答案 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的第二个参数,当读取文件并传入数据时,将调用该参数。所有变量赋值都在回调内完成。

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