SignalR JS客户端:向invoke方法传递参数

SignalR JS client: passing arguments to the invoke method

本文关键字:方法 参数 invoke JS 客户端 SignalR      更新时间:2023-09-26

我试图在对象appHub中编写一个函数,该函数将调用服务器上的方法。下面是我的代码:

var connection = $.hubConnection();
var appHubProxy = connection.createHubProxy('appHub');
var appHub = {
     //some methods here
     invoke: function(){
        appHubProxy.invoke.call(arguments);
     }
}
可以看到,invoke方法应该这样调用:

appHub.invoke('serverMethod', arg1, ..., argN)

当我运行这段代码时,我得到这个错误:

Uncaught TypeError: Cannot read property '_' of undefined

我尝试了appHubProxy.invoke(arguments),它不会抛出错误,但当然,服务器方法从未被调用。

我怎么能传递参数SignalR的调用方法正确?

两个问题:

  1. 当您使用Function.prototype.callFunction.prototype.apply时,您需要传递的第一个参数是上下文(this的值)
  2. 如果你想以数组形式传递参数,你需要使用apply而不是call

在您的代码中,您使用数组作为上下文调用invoke方法。调用方法正在寻找一个嵌套的属性(可能是this.connection._),它不存在于数组中,所以这就是为什么你得到错误。

所以你可能想用这个代替:

appHubProxy.invoke.apply(appHubProxy, arguments);