问题的简历:如何在内部保存函数调用的参数,以便在下次调用时使用
我知道我的问题并不复杂,但我在这里有点困惑。 这是问题所在:
Updateorderbook是一个连接到websocket,订阅频道的功能。此功能需要在连接到新通道之前第二次(或更多次)调用当前通道时取消订阅。 要取消订阅,我需要“previousparams”,所以我尝试做的就是将这些params存入this.currentParams,但显然它不起作用。
要恢复我的问题,我需要在内部保存呼叫的参数,以便我可以在下次呼叫时访问它。
updateOrderbook: function(params) {
var self = this;
var ws = OrderbookSocket.getInstance();
if(ws.readyState === 1) {
var request = OrderbookRequest.request(this.currentParams, 'unsubscribe');
ws.send(request);
// this.currentParams = params;
}
ws.onopen = function(e) {
var request = OrderbookRequest.request(params,'subscribe');
self.currentParams = params;
ws.send(request);
}
ws.onclose = function(e) {
console.log(" WS has been closed: ",e);
}
ws.onmessage = function(e) {
}
}
我不喜欢的是这个.currentParams会自动更新,即使ws.onopen没有被调用! (这就像是绑定的,有些东西我没有到达这里)。
答案 0 :(得分:1)
问题是变量是由值和对象通过引用传递的,所以你需要使用_.clone()下划线函数克隆你的对象,例如
如果这是您想要的唯一的东西,您只需将代码更改为:
var gl_params;
updateOrderbook: function(params) {
// gl_params still your old params
// params are your new params
var self = this;
var ws = OrderbookSocket.getInstance();
if(ws.readyState === 1) {
var request = OrderbookRequest.request(gl_params, 'unsubscribe');
ws.send(request);
}
ws.onopen = function(e) {
var request = OrderbookRequest.request(params,'subscribe');
gl_params = _.clone(params);
ws.send(request);
}
ws.onclose = function(e) {
console.log(" WS has been closed: ",e);
}
ws.onmessage = function(e) {
}
}