在JavaScript中如何强制函数在返回一些数据之前完成执行

时间:2013-12-08 10:15:49

标签: javascript

我想使用PhoneGap读取文件然后返回该文件的数据,但是当我执行代码时,它会在读取文件之前返回。下面的代码显示了如何读取文件:

function getData() {
    var fileData = null;
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
      function gotFS(fileSystem) {
         fileSystem.root.getFile("data.txt", null, gotFileEntry, fail);
         function gotFileEntry(fileEntry) {
            fileEntry.file(gotFile, fail);
         }
         function gotFile(file){
            readAsText(file);
         }

        function readAsText(file) {
           var reader = new FileReader();
           reader.onloadend = function(evt) {
            fileData = evt.target.result;
                alert(fileData) 
               // this alert is executed after returning the data, so it return the data, but the second alert return null when this is method called.
           };
           reader.readAsText(file);
        }
    }
    return fileData;
}

现在,当我调用该函数时,它将返回null

var data = getData();
alert(data); // return null

2 个答案:

答案 0 :(得分:1)

这是一种异步方法,因此您必须使用回调。

更改getData,以便接受回调:

function getData(callback) { ....

然后在警报的地方,改为:

if (callback) callback(fileData);

现在您可以这样调用您的函数:

var _data;

getData(function(data) { 
 // do stuff with data ...
 _data = data;
 alert(data);
});

答案 1 :(得分:0)

您无法同步异步查询的结果。

查看第一个回复,了解更多详情:How do I return the response from an asynchronous call?