关于异步:如何从javascript对indexeddb方法进行同步调用

how to make synchronous call to indexeddb method from javascript

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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是异步调用所以,我在"在method2内警告"之前得到"第一个警报"。 如何以顺序方式获得此信息?

请帮助


不要method2返回值。 相反,将回调函数传递给method2,该函数将在获取值后执行:

1
2
3
4
5
6
7
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) });
}

并像这样调用它:

1
2
3
4
5
6
7
8
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
    });
}