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

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

标签: signalr.clientasp.net-core-signalr

解决方案


是的,所有处理程序都可以仅使用方法名称注销

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

推荐阅读