3

javaスクリプトでmethod1と言うメソッドが1つあり、別のメソッドがmethod2呼び出しと言っています。method2は、method2() の呼び出し後に method1 で必要な 1 つの値を返します。

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 内のアラート」の前に「最初のアラート」を取得しています。これを順次取得する方法は?

助けてください

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 に答える