3

我在java脚本中有一个方法说method1 ,它有另一种方法说method2调用。method2在 method2() 调用之后返回一个在 method1 中需要的值。

var userObj={"first": [{'Key':'1',
               'value':'student',},
                          {'Key':'2',
               'value':'Teacher',}
                 ],
        "second":[{'Key':'1',
               'class':'theory',},
                          {'Key':'2',
               'value':'lab',}
                 ]

            };

function method1(){
    var dataArray =method2(userObj.first);  
    alert("dataArray size -"+dataArray.length);
}

function method2(firstData) {

        var dataArray = new Array();
        $.indexedDB("SelfAssessment").objectStore("First_Sheet", "readonly").each(function(elem) {
            dataArray .push(elem.value);
        }).done(function() {
            alert("inside first Data");
            return dataArray ;
        });
        return dataArray ;

    }

在上面的代码中,method2 返回我必须在 method1 中使用的 dataArray。那么该怎么做呢?

因为,method2 是异步调用,所以我在“方法 2 内的警报”之前得到“第一个警报”。如何以顺序的方式得到这个?

请帮助

4

1 回答 1

4

没有method2返回值。相反,传递一个回调函数,method2一旦获取到值就会执行:

function method2(firstData, completionCallback) {

    var dataArray = new Array();
    $.indexedDB("SelfAssessment").objectStore("First_Sheet", "readonly").each(function(elem) {
        dataArray.push(elem.value);
    }).done(function() { completionCallback(dataArray) });
}

并像这样调用它:

function method1(){
    method2(userObj.first, function(dataArray) {
        // inside a function that is called by method2 when the value is fetched
        alert("dataArray size -"+dataArray.length);

        // do everything with dataArray inside this function
    }); 
}
于 2012-12-20T14:43:42.260 回答