正如Nitzan Shaked所说,您的问题是由于循环问题。当回调开始触发时,所有i
值都9
在这里。
通用解决方案
作为通用解决方案,使用简单的闭包解决它。
var WebSocket = require('ws')
var ws = [];
for (var i = 0; i < 10 ; ++i) {
ws[i] = new WebSocket('ws://127.0.0.1:9898/echo/websocket');
ws[i].on('open', generator(ws[i]));
}
//generator makes a function with present object and returns it
var generator = function (k) {
return function() {
k.send('why');
}
}
简单的方法
但是特定于您的上下文的最简单方法是简单地替换ws[i]
为this
var WebSocket = require('ws')
var ws = [];
for (var i = 0; i < 10 ; ++i) {
ws[i] = new WebSocket('ws://127.0.0.1:9898/echo/websocket');
ws[i].on('open', function() {
this.send('why');
});
}