Javascript SignalR 等到服务广播所有消息

标签 javascript asynchronous signalr wait

我在对象列表上有一个 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/

相关文章:

javascript - 避免 Angular2 在单击按钮时系统地提交表单

javascript - SignalR 回调不会在 JQuery UI 小部件中触发

javascript - API 应为 %100 同步或 %100 异步示例

Node.js:是否使用 Crypto 模块完全异步创建 MD5 哈希?

javascript - 使用 SignalR 查明是否有人在另一个网站上按下了按钮

javascript - 如何在 ng-if 中使用 $index

javascript - 如何在文本字段 Appcelerator 中输入文本后验证电子邮件

c# - 如何异步播放声音,但自己在队列中?

signalr - 保护 SignalR 调用

c# - 为什么 Context.User.Identity.Name 在 Windows Form Hub 上下文中为空?