如何从SignalR客户端取消注册功能?

时间:2018-06-06 23:37:14

标签: signalr.client asp.net-core-signalr

请考虑以下代码:

var connection = new signalR.HubConnectionBuilder().withUrl("/hub").build();

connection.on("ReceiveMessage", (message) => {
    console.log("Once");
});

connection.on("ReceiveMessage", (message) => {
    console.log("Twice");
});

现在,当服务器向客户端发送ReceiveMessage时,浏览器的控制台包含OnceTwice。显然,这两个函数都被调用。

问题在于,我的经验不足和缺乏知识我假设为相同的命令注册一个新函数(在这种情况下为ReceiveMessage)将自动补充先前注册的函数(如果有的话)。我正在用这个假设编写我的程序。一旦我开始注意到我的程序的bizzarre行为,我只需要验证这个假设。

我可以以某种方式取消注册以前注册的处理程序吗?或者我应该重写我的JS代码,假设我每个命令只应该为每个连接注册一个函数吗?

1 个答案:

答案 0 :(得分:1)

是的,all handlers can be unregistered with just the method name

var connection = new signalR.HubConnectionBuilder().withUrl("/hub").build();

connection.off("ReceiveMessage");
connection.on("ReceiveMessage", (message) => {
    console.log("Once");
});

connection.off("ReceiveMessage");
connection.on("ReceiveMessage", (message) => {
    console.log("Twice");
});