phonecap同步调用文件系统

时间:2013-08-09 07:18:59

标签: javascript cordova

我遇到使用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之类的内容,因为我需要立即获得响应,而不是在延迟之后

1 个答案:

答案 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);
}

现在它正在运作