Javascript HTML5/Cordova中的简单readFile()函数
下面是一个简单的函数,它应该返回当前目录中给定文件的内容。 它正确地读取文件内容,但当我想要返回它时,它却没有这样做<代码>读取器。读取数据时调用onloadend。如何使其从该函数返回数据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
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即可