0

我遇到了使用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因为我需要立即而不是延迟后得到响应

4

1 回答 1

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

现在它正在工作

于 2013-08-09T13:14:32.660 回答