我想使用PhoneGap读取文件然后返回该文件的数据,但是当我执行代码时,它会在读取文件之前返回。下面的代码显示了如何读取文件:
function getData() {
var fileData = null;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
function gotFS(fileSystem) {
fileSystem.root.getFile("data.txt", null, gotFileEntry, fail);
function gotFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}
function gotFile(file){
readAsText(file);
}
function readAsText(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
fileData = evt.target.result;
alert(fileData)
// this alert is executed after returning the data, so it return the data, but the second alert return null when this is method called.
};
reader.readAsText(file);
}
}
return fileData;
}
现在,当我调用该函数时,它将返回null
var data = getData();
alert(data); // return null
答案 0 :(得分:1)
这是一种异步方法,因此您必须使用回调。
更改getData
,以便接受回调:
function getData(callback) { ....
然后在警报的地方,改为:
if (callback) callback(fileData);
现在您可以这样调用您的函数:
var _data;
getData(function(data) {
// do stuff with data ...
_data = data;
alert(data);
});
答案 1 :(得分:0)
您无法同步异步查询的结果。
查看第一个回复,了解更多详情:How do I return the response from an asynchronous call?