【问题标题】:SignalR callback in javascriptjavascript中的SignalR回调
【发布时间】:2023-03-22 16:50:02
【问题描述】:

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

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

我想要的是

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

这将使我能够为同一个 signalR 方法定义来自网页的不同回调函数。 现在我通过在我的网页上定义一个函数来以一种 hack-ish 的方式来做这件事

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
        }

    };

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

【问题讨论】:

  • 你想从哪里指定回调函数?您是否希望服务器在调用客户端 hub 方法时提供回调函数?我不清楚你的问题。

标签: signalr signalr.client


【解决方案1】:

使用闭包:

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


messageHub.client.sendProgress = createFunction(callback)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多