我在对象列表上有一个 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 函数时,回复进入另一个函数。所以我不知道如何跟踪。
提前致谢。
最佳答案
我对 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 放在哪里,以便加载函数和回复函数都可以访问它们。
关于Javascript SignalR 等到服务广播所有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17449842/