2

オブジェクトのリストに for ループがあります。これらのオブジェクトの条件によっては、signal-r 関数を呼び出して各オブジェクトのデータをロードする必要があります。そして、これらすべてのオブジェクトがハブから返されたデータで満たされた後、クライアント側でプロセスを続行したいと考えています。

私の問題は、すべてのループが完了したことを追跡してから、残りのコードを続行できるようにしたいということです。

var stratsList = new Array();

for (var cp = 0; cp < myPools.length; cp++) {
    if (myPools.SubItems.length == 0)
        conn.server.LoadData(myPools[cp].id);

    $.each(myPools.SubItems, function (k, v) {
        stratsList.push(v.name);
    });
}

for (var s = 0; s < stratsList.length; s++) {
    //Do some other work once all SubItems on myPools are Loaded.
}

したがって、基本的に myPools でループしている間、各 myPools の SubItems にデータがロードされていることを確認しています。ロードされていない場合は、データをロードして続行します。

signal-r 関数を呼び出すと、応答が別の関数に入ります。だから私は追跡する方法を知りません。

前もって感謝します。

4

1 に答える 1

0

私は JavaScript に比較的慣れていませんが、これに挑戦します。

var numPoolsToBeFilled = myPools.length;

var doMoreWorkIfReady = function () {
    if (numPoolsToBeFilled <= 0) {
        for (var s = 0; s < stratsList.length; s++) {
            // Do some other work once all SubItems on myPools are Loaded.
        }
    }
};

for (var cp = 0; cp < myPools.length; cp++) {
    if (myPools.SubItems.length == 0)
        conn.server.LoadData(myPools[cp].id);
    else
        numPoolsToBeFilled--;
}
// ... other code omitted ...

// just in case all pools were already filled
doMoreWorkIfReady();

次に、返信/コールバック関数内で...

numPoolsToBeFilled--;
doMoreWorkIfReady();

コードがどのように構成されているかわかりません。そのため、読み込み関数と応答関数の両方がアクセスできるように、numPoolsToBeFilled と doMoreWorkIfReady を配置する場所を把握する必要があります。

于 2013-07-03T15:17:30.830 に答える