Signalr 通知浏览器UI有关服务器的信号器请求

Signalr 通知浏览器UI有关服务器的信号器请求,signalr,signalr.client,Signalr,Signalr.client,我正在浏览器中使用信号器。一些请求(在服务器上调用函数)很长,我想显示微调器/加载栏 我是否可以在函数启动和返回时以某种方式钩住事件。我试图弄明白你的意思-我认为基本上你想要某种方式钩住调用的开始和结束(加载和卸载微调器) 我用两种不同的方式来做这件事——首先是一次性的(第一个例子),然后是更系统的(第二个例子)。希望其中之一就是你所需要的 $.connection.myHub.server.hubMethod().done(function () {

我正在浏览器中使用信号器。一些请求(在服务器上调用函数)很长,我想显示微调器/加载栏


我是否可以在函数启动和返回时以某种方式钩住事件。

我试图弄明白你的意思-我认为基本上你想要某种方式钩住调用的开始和结束(加载和卸载微调器)

我用两种不同的方式来做这件事——首先是一次性的(第一个例子),然后是更系统的(第二个例子)。希望其中之一就是你所需要的

$.connection.myHub.server.hubMethod().done(function () {
                                //called on success
                            }).fail(function (e) {
                                //called on failure - I don't recommend reading e
                            }).always(function() {
                                //called regardless
                                spinner.close();
});
spinner.open(); // must be triggerd AFTER call incase exception thrown (due to connection not being up yet)
如果您不喜欢这样,可能是因为您在数百段不同的代码中调用了hub方法,那么还有其他一些技巧要复杂一些。让我们看看:

function SetupSpinnerOnCallToSignalrMethod(hubServer, method, spinnerStartCallback, spinnerEndCallback) {
    var prevFunc = hubServer[method];
    hubServer[method] = function () {
        var ret = prevFunc.apply(this, arguments);
        spinnerStartCallback(); // must be triggerd AFTER call incase exception thrown (due to connection not being up yet)
        ret.always(function() {
            spinnerEndCallback();
        });
        return ret;
    };
}

//then call this for each method
SetupSpinnerOnCallToSignalrMethod($.connection.myHub.server,
                                  "hubMethod",
                                  function() { spinner.open(); },
                                  function() { spinner.close(); }
);

//the server call should then work exactly as before, but the spinner open and close calls are invoked each time.