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 回答