0

javascript で persistencejs (これはライブラリです!) データベースからデータを取得しようとしています。値を取得して配列にプッシュしています。これを forEach ループで実行しています。ループ内で配列に値が入力されています。アラートを使用してこれを確認しました。

しかし、ループの外側の配列を見ると、空です。どうしてこれなの?

コードは次のとおりです (関数内に変数を入れてみましたが、これも this.newDataArray に変更しようとしました)。

var newDataArray = new Array();
function getData(){

    dataTable.all().list(function(tasks){
        tasks.forEach(function (r) {
            var tTank1 = r.Tank1;
            var tTank2 = r.Tank2;
            var tTank3 = r.Tank3;
            var tTank4 = r.Tank4;
            var tHelicopter = r.Helicopter;
            newDataArray.push(tTank1, tTank2, tTank3, tTank4, tHelicopter);
            alert(newDataArray);
        });
    });
    alert(newDataArray);
    return newDataArray
}

ここでは、実行中のメソッドの戻り値をテストしています。

Data.prototype.fetchData = function(csv){
    jQuery.get(csv, function(data) {
        var result = $.csv.toArrays(data);
        result.shift();
        result.forEach(function (r) {
            var joinedResult = r.join();
            fillDB(joinedResult);
        });
    });
    alert(getData());
};

だから、誰かがこれに対する答えを知っていることを願っていますか?また、私のコードや投稿形式に関する他の批判も歓迎します:)

4

1 に答える 1

3

問題はおそらく、データが入力されていないことではなく、アラートを出すのが早すぎることです。

jQuerygetは非同期呼び出しであり、コールバックが処理される前に戻ります。通話内でアラートを移動するgetと、データが表示されます。

Data.prototype.fetchData = function(csv){
    jQuery.get(csv, function(data) {
        var result = $.csv.toArrays(data);
        result.shift();
        result.forEach(function (r) {
            var joinedResult = r.join();
            fillDB(joinedResult);
        });
        alert(getData());
    });
};
于 2013-08-01T11:40:05.723 に答える