首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML5读取文件在读取文件之前返回结果

HTML5读取文件在读取文件之前返回结果
EN

Stack Overflow用户
提问于 2015-05-04 18:09:05
回答 1查看 51关注 0票数 0

我正在尝试读取一个文本文件并返回结果。

到目前为止,我能够读取文件,但是当我试图返回结果时,结果会在文件读取完成之前返回。

如何强制函数等待结果?我认为这与回调有关,但不知道如何实现。

代码语言:javascript
复制
MyFile.prototype.readFile = function(fileDir, fileName) {
    var strText = "";

    window.resolveLocalFileSystemURL(fileDir, gotDir, fail);
    function gotDir(dir) {
        dir.getFile(fileName, {create: true}, gotFile, fail);
    }

    function gotFile(fileEntry) {
        fileEntry.file(gotRead, fail);
    }

    function gotRead(file) {
        var reader = new FileReader();
        reader.onerror = function(evt) {
            console.log("Reading " + file.name + " Failed");
        };
        reader.onloadstart = function(evt) {
            console.log("Read " + file.name + " Starting");
        };
        reader.onload = function(evt) {
            console.log("Read " + file.name + " Successful");
        };
        reader.onloadend = function(evt) {
            console.log("Read " + file.name + " Ending");
            endRead(evt.target.result);
        };
        reader.onprogress = function(evt) {
            console.log(evt.loaded + " of " + evt.total);
        };
        reader.readAsText(file);
    }
    function endRead(value) {
        strText = value;
    }
    //returns null value before file read finishes
    return strText;
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 18:33:32

FileSystem api是异步的,这意味着您必须将一个回调传递给您的readFile方法,该方法在读取文件时将被调用。不可能同步做,see this.

您可以将签名更改为:

代码语言:javascript
复制
MyFile.prototype.readFile = function(fileDir, fileName, endRead) {

并删除以下行

代码语言:javascript
复制
function endRead(value) {
    strText = value;
}
//returns null value before file read finishes
return strText;

现在,您可以将一个函数作为第三个参数传递给readFile方法,并使用该函数的第一个参数访问文件内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30036946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档