Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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/Cordova中的简单readFile()函数_Javascript_Html_Cordova_Closures_Html5 Filesystem - Fatal编程技术网

Javascript HTML5/Cordova中的简单readFile()函数

Javascript HTML5/Cordova中的简单readFile()函数,javascript,html,cordova,closures,html5-filesystem,Javascript,Html,Cordova,Closures,Html5 Filesystem,下面是一个简单的函数,它应该返回当前目录中给定文件的内容。 它正确地读取文件内容,但当我想要返回它时,它却没有这样做读取器。读取数据时调用onloadend。如何使其从该函数返回数据 readFile: function(fileName) { app.fs.data = "{}"; // clear whatever was stored before var hasFile = function(fileEntry) { var got

下面是一个简单的函数,它应该返回当前目录中给定文件的内容。 它正确地读取文件内容,但当我想要返回它时,它却没有这样做<代码>读取器。读取数据时调用onloadend。如何使其从该函数返回数据

readFile: function(fileName) {
        app.fs.data = "{}"; // clear whatever was stored before
        var hasFile = function(fileEntry) {
            var gotFile = function(file) {
                var reader = new FileReader();
                reader.onloadend = function(evt) {
                    app.fs.data = evt.target.result;
                    console.log("Read as Text: " + file.name);
                    console.log("Data: " + app.fs.data); // app.fs.data contains correct data
                };
                reader.onerror = function(e) {
                    console.log("Error: " + e);
                };
                reader.readAsText(file);
            };
            fileEntry.file(gotFile, app.fs.fail);
        };
        app.fs.dir.getFile(fileName, null, hasFile, app.fs.fail);
        console.log("Actual data: " + app.fs.data); // app.fs.data contains INCORRECT data "{}"
        return app.fs.data;
    }
控制台输出:

Actual data: {}:92
Read as Text: article.json:81
Data: {"id":1405518906105,"name":"My Name","category":0,"abstract":"","content":"","published":false,"lastPublish":null}:82

app.fs.data在返回时为{}。gotfile是一个异步函数,返回值的最后两行readFile可以在gotfile函数之前执行。这是在你的控制台上发生的。
我建议您首先阅读javascript中的回调和闭包。

最终理解,我的代码毫无意义。我最终使用了JavaScriptPromises,这是一种优雅地处理基于异步的函数的方法。欲了解更多信息,请阅读此处:

因为Cordova不支持Promissions,比如Chrome或其他浏览器,所以我使用了这个库,它具有非常需要的功能:

还有许多其他实现承诺的库和其他异步帮助程序,只需使用google即可