我遇到使用phonegap进行异步调用的问题,因为我需要返回以下函数才能处理剩下的代码。
所以我有以下功能:
function getFileContent(fileName) {
var content = null;
document.addEventListener("deviceready", function() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile("data/" + fileName, null, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
content = evt.target.result;
alert(content);
}
reader.readAsText(file);
});
}, fail);
}, fail);
}, false);
return content;
}
但是,当我首先尝试alert(getFileContent(fileName));
时,我会获得null
,然后获取包含文件内容的提醒
我尝试在返回之前添加以下行,但之后没有执行任何操作:
while (content == null);
我想避免使用类似setTimeout
之类的内容,因为我需要立即获得响应,而不是在延迟之后
答案 0 :(得分:0)
正如SHANK所说,我必须在最后一个回调函数中调用最终函数,所以我只是将我的函数改为:
function getFileContent(fileName, call) {
var callBack = call;
var content = null;
var args = arguments;
var context = this;
document.addEventListener("deviceready", function() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(
fileSystem) {
fileSystem.root.getFile("data/" + fileName, null, function(
fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
args = [].splice.call(args, 0);
args[0] = evt.target.result;
args.splice(1, 1);
callBack.apply(context, args);
}
reader.readAsText(file);
});
}, fail);
}, fail);
}, false);
}
现在它正在运作