Javascript phonecap对文件系统的同步调用
我在使用phonegap进行异步调用时遇到了一个问题,因为我需要获得以下函数的返回以处理其余代码 所以我有以下功能:Javascript phonecap对文件系统的同步调用,javascript,cordova,Javascript,Cordova,我在使用phonegap进行异步调用时遇到了一个问题,因为我需要获得以下函数的返回以处理其余代码 所以我有以下功能: function getFileContent(fileName) { var content = null; document.addEventListener("deviceready", function() { window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(
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
的东西,因为我需要立即得到响应,而不是像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);
}
现在它开始工作了您需要执行的任何后期读取文件内容都应该是回调函数(或从回调函数调用的另一个函数)的一部分。上面的代码看起来很有前途,我很高兴它可以工作,但不清楚如何调用它。传递到getFileContent()的内容是什么?传递要读取的内容的文件名,以及执行完所有操作(打开并读取)后将调用的函数