请考虑以下代码:
var connection = new signalR.HubConnectionBuilder().withUrl("/hub").build();
connection.on("ReceiveMessage", (message) => {
console.log("Once");
});
connection.on("ReceiveMessage", (message) => {
console.log("Twice");
});
现在,当服务器向客户端发送ReceiveMessage
时,浏览器的控制台包含Once
和Twice
。显然,这两个函数都被调用。
问题在于,我的经验不足和缺乏知识我假设为相同的命令注册一个新函数(在这种情况下为ReceiveMessage
)将自动补充先前注册的函数(如果有的话)。我正在用这个假设编写我的程序。一旦我开始注意到我的程序的bizzarre行为,我只需要验证这个假设。
我可以以某种方式取消注册以前注册的处理程序吗?或者我应该重写我的JS代码,假设我每个命令只应该为每个连接注册一个函数吗?
答案 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");
});