JavaScript 中的 SignalR 回调

标签 signalr signalr.client

有没有办法为 SignalR 传递回调函数?现在我的 site.js

messageHub.client.sendProgress = function (progress) {
        //doSomething with progress
}

我想要的是

messageHub.client.sendProgress = function (progress,callback) {
        callback(progress);
}

这将使我能够为同一 signalR 方法从网页定义不同的回调函数。 现在我正在通过在我的网页上定义一个函数以一种黑客式的方式来做到这一点

function fnSendProgress(progress) //define this for site.js.
    {
        //do something here
    }

然后在 site.js 中通过

调用它
messageHub.client.sendProgress = function (progress) {
        debugger;
        //have a definition of a function called fnSendProgress(progress)
        //if found it will call it else call default
        if (typeof fnSendProgress == 'function') {
            fnSendProgress(progress);
        }
        else {
                //do something at site.js level
        }

    };

它有效,但我想知道是否有更干净的方法。 非常感谢任何帮助。

最佳答案

使用闭包:

function createfunction(callback)
{
    return function(progress) { callback(progress); }
}


messageHub.client.sendProgress = createFunction(callback)

首先定义一个函数“createFunction”,给定一个回调,该函数返回另一个带有一个参数的函数,该函数调用指定的回调。

然后将调用该函数的结果分配给信号器的 sendProgress。

换句话说:对于您希望的每个回调,您可以动态生成一个带有一个参数的函数,该函数调用回调并将参数传递给它。

关于JavaScript 中的 SignalR 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15551809/

相关文章:

angular - .NET Core 2.1 SignalR 使用 Angular 6 客户端进行长轮询的回退

javascript - 信号R。无法到达 OnConnected()

asp.net - Signalr 在 IIS 7.5 和 Edge/IE 中错误地反序列化我的对象,foreverFrame 损坏了?

asp.net-core - 在 ASP.NET Core 中实例化 IHubContext

asp.net - 我可以合并 SignalR 和 RESTful API 吗?

c# - 如何在 ASP.NET Core 中保持对象存活?

signalr - 重新连接断开连接的 SignalR 客户端 (JS) 的最佳实践

asp.net-core - 避免 DateTime 转换,同时将其传递给 AspNetCore.SignalR .Net 客户端

SignalR 的 Android 客户端不接收但 JS 接收

c# - 集线器上的停止方法不会触发 onDisconnect