如何从 SignalR 客户端注销函数?

How to deregister a function from SignalR client?

考虑以下代码:

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 在这种情况下)将自动替换以前注册的函数,如果有的话。我正在用这个假设编写我的程序。一旦我开始注意到我的程序的奇怪行为,我只需要验证这个假设。

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

是的,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");
});