phonecap对文件系统的同步调用
phonecap synchronous call to filesystem
我遇到了使用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
的东西,因为我需要立即获得响应,而不是在延迟
正如SHANK所说,我必须调用最后一个回调函数中的final函数,所以我刚刚将函数更改为:
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);
}
现在它正在上运行
相关文章:
- 同步调用,直到用户通过angular验证为访问者
- 如何使用javascript中的生成器模拟同步调用
- 通过同步调用检查用户是否存在
- Node.js同步调用passport本地注册
- 在同步调用之前先调用函数
- 对async函数进行同步调用
- 节点.js与 ASYC 瀑布模块同步调用
- 如何在节点/环回中同步调用 model.find 方法
- 异步进程上的同步调用
- 从 javascript 同步调用 Struts 2 操作
- 环回:对环回 API 进行同步调用
- JavaScript 同步调用
- Javascript方法同步调用,没有回调和$.ajax
- Javascript 同步调用与更新
- EXT-js如何同步调用Store
- AngularJs:$http同步调用
- phonecap对文件系统的同步调用
- javascript/nodejs:在大的、分块的数据集上同步调用一组类似的异步函数会导致内存泄漏
- Meteor同步调用函数
- 在nodejs中,是否有更好的设计模式来同步调用异步函数