Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5读取文件在读取文件之前返回结果_Javascript_Html_Cordova - Fatal编程技术网

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

Javascript HTML5读取文件在读取文件之前返回结果,javascript,html,cordova,Javascript,Html,Cordova,我正在尝试读取文本文件并返回结果 到目前为止,我能够读取文件,但当我尝试返回结果时,结果会在读取文件之前返回 如何强制函数等待结果? 我认为这与回调有关,但不知道如何实现它 MyFile.prototype.readFile = function(fileDir, fileName) { var strText = ""; window.resolveLocalFileSystemURL(fileDir, gotDir, fail); function gotDir(d

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

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

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

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;
};

文件系统api是异步的,这意味着您必须将回调传递给readFile方法,该方法将在读取文件时被调用。不可能同步进行

您可以将您的签名更改为:

MyFile.prototype.readFile = function(fileDir, fileName, endRead) {
然后拆下以下行

function endRead(value) {
    strText = value;
}
//returns null value before file read finishes
return strText;
现在,您可以将函数作为第三个参数传递给
readFile
方法,并使用该函数的第一个参数访问文件内容