如果方法参数化,nodejs WebSocket.send() 不发送
nodejs WebSocket.send() is not sending if method is parametrized
我刚刚停留在一个有趣的时刻。
在我的服务器中,我正在实施 WebSocket。在 ws.on('connection') 方法中,我有两个相同函数的变体:
1-st 运行良好
2nd,仅参数不同 - 也在工作,但不向客户端发送消息。
代码:
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({server: server});
wss.on('connection', function(ws){
var timerR;
// 1
function startTheInterval1(){
timerR = setInterval( function() {
if (a >= 0){
ws.send('message ' + a); // Client recieves the message
clearInterval(timerR);
}
}, 1000);
}
startTheInterval1();
// 2
function startTheInterval2(flag){
timerR = setInterval( function() {
if (flag >= 0){
ws.send('message ' + flag); // Client don`t see the message
clearInterval(timerR);
}
}, 1000);
}
startTheInterval2(a);
// some other code with socket
}
似乎我遗漏了一些关于 JavaScript 的信息。所以问题是:为什么第二个变体不能正常工作?
您的第一个函数引用了一个全局函数 a
,它可以在间隔之间更改值。
你的第二个函数引用了一个永远不会改变值的局部a
。
JavaScript中的所有原始类型都是按值传递的。只有对象和数组通过引用传递。这就是为什么你的第二个功能不起作用。
我刚刚停留在一个有趣的时刻。 在我的服务器中,我正在实施 WebSocket。在 ws.on('connection') 方法中,我有两个相同函数的变体:
1-st 运行良好
2nd,仅参数不同 - 也在工作,但不向客户端发送消息。 代码:
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({server: server});
wss.on('connection', function(ws){
var timerR;
// 1
function startTheInterval1(){
timerR = setInterval( function() {
if (a >= 0){
ws.send('message ' + a); // Client recieves the message
clearInterval(timerR);
}
}, 1000);
}
startTheInterval1();
// 2
function startTheInterval2(flag){
timerR = setInterval( function() {
if (flag >= 0){
ws.send('message ' + flag); // Client don`t see the message
clearInterval(timerR);
}
}, 1000);
}
startTheInterval2(a);
// some other code with socket
}
似乎我遗漏了一些关于 JavaScript 的信息。所以问题是:为什么第二个变体不能正常工作?
您的第一个函数引用了一个全局函数 a
,它可以在间隔之间更改值。
你的第二个函数引用了一个永远不会改变值的局部a
。
JavaScript中的所有原始类型都是按值传递的。只有对象和数组通过引用传递。这就是为什么你的第二个功能不起作用。