你能听到"任何"调用服务本身内的服务,以便在执行服务之前验证其他一些条件?
我有这个:
.factory('socket',function('socketFactory') {
var socket = io.connect(nodeUrl, {
query: my_query
});
return socket;
});
在socketFactory中有许多方法,例如emit
,connect
等,以及connected
等属性。
在我的控制器中,我注入socket
工厂并执行简单的操作:
socket.emit("test_message");
我想要做的是在执行任何方法之前,只需在connected
服务中检查socket
属性。例如,如果服务器出现故障,那么socket.connected=false
,我想知道我需要重新初始化连接。
我可以用if(socket.connected) { ... }
手动将所有方法放在服务中,但我想知道是否可以使用socketFactory中的所有方法只使用一个块来完成。
我真的在寻找这样的东西(不起作用):
socket.on(event, function(){
console.log("You tried:" + event);
});
答案 0 :(得分:0)
由于OP中有两个问题,我将回答第一个问题:
.factory('socket',function('socketFactory') {
var socket = {};
socket._socket = { connected: false };
socket.initialize = function() {
this._socket = io.connect(nodeUrl, {
query: my_query
});
};
socket.initialize();
// find all available functions on socket._socket
var fns = Object.keys(socket._socket).filter(function (x) {
return typeof socket._socket[x] == 'function';
});
// create a one-to-one mapping of functions on socket from the
// member _socket such that we check the socket connection state
// before calling the underlying _socket function with the same
// name
angular.forEach(fns, function (x) {
socket[x] = function () {
if (!this._socket.connected) {
this.initialize();
}
if (this._socket.connected) {
this._socket[x].apply(this._socket, [].slice.call(arguments));
}
}
});
return socket;
});