【发布时间】:2015-02-24 10:54:23
【问题描述】:
我正在创建一个通用的角度服务,它将执行信号器的本机操作
angular.module('signalr', []).provider('signalrService', [function () {
var configuration;
this.config = function (config) {
configuration = config;
};
this.$get = ['$log', '$timeout', '$q', '$rootScope', function ($log, $timeout, $q, $rootScope) {
return new signalrService(configuration, $log, $timeout, $q);
}];
}])
function signalrService(configuration, $log, $timeout, $q, $rootScope) {
if (!configuration) {
$log.log('Invalid config');
return;
}
var signalRhubs = $.hubConnection();
if (!signalRhubs) {
$log.log('SignalR is not referenced.');
return;
}
signalRhubs.logging = configuration.logging;
var warmMeUp = signalRhubs.createHubProxy('userHub');
warmMeUp.on('getOnlineUserList', function (data) {
console.log(data)
})
signalRhubs.connectionSlow(function () {
$log.warn('We are currently experiencing difficulties with the connection.')
});
signalRhubs.error(function (error) {
$log.error('SignalR error: ' + error)
});
$(signalRhubs).bind("onDisconnect", function (e, data) {
$timeout(function () {
$log.warn('Signalr Connection dead.')
}, 10000);
});
this.invoke = function (hubName, serverFunction, paramObject) {
var def = $q.defer();
var hubProxy = signalRhubs.createHubProxy(hubName)
signalRhubs.start().done(function () {
if (paramObject) {
hubProxy.invoke(serverFunction, paramObject).done(function (data) {
def.resolve(data);
}).fail(function (error) {
$log.error('SignalR error: ' + error)
def.reject();
});
}
else {
hubProxy.invoke(serverFunction).done(function (data) {
def.resolve(data);
}).fail(function (error) {
$log.error('SignalR error: ' + error)
def.reject();
});
}
}).fail(function () {
$log.error('Failed to start signalR')
def.reject();
});
return def.promise;
}
this.on = function (hubName,clientSubscribeFunction) {
var def = $q.defer();
var hubProxy = signalRhubs.createHubProxy(hubName)
hubProxy.on(clientSubscribeFunction, function (object) {
def.resolve(object);
});
return def.promise;
}
}
这是我的控制器
app.controller('homeController', ['$scope', 'signalrService', function ($scope, signalrService) {
signalrService.on('userHub', 'getOnlineUserList').then(function (userList) {
console.log(userList);
});
signalrService.invoke('userHub', 'getOnlineUsers')
}]);
这里的问题是当我在服务中取消注释我的“warmUp.on”代表时,通用“on”(this.on)和“warmUp.on”都被执行,但是当我评论“warmUp.on”时,通用(this.on) 委托也未执行。 请帮我解决这个问题
【问题讨论】: