如何在 socket.io 回调中更新this._arr数组?
class SocketClass{
constructor(server) {
this._arr = [];
this._io = require('socket.io').listen(server);
this._initListeners();
}
_initListeners() {
this._io.on('connection', (socket, arr) => {
socket.on('event1', (data) => {
this._arr.push(data);
});
});
}
}
问题是this._arr在回调中未定义。我想这是因为这引用了回调函数本身......
How could be this._arr array updated inside a socket.io callback?
我这样做的最简单方法是使用that = this
编码样式捕获对象的范围。
附言。虽然箭头功能用于保持范围,但从长远来看that = this
我仍然认为它更容易、更灵活。因为您也可以做更具体的事情。例如。 thisSocketClass
、thisEvent
等。
例如。
class SocketClass{
constructor(server) {
this._arr = [];
this._io = require('socket.io').listen(server);
this._initListeners();
}
_initListeners() {
const that = this;
this._io.on('connection', (socket, arr) => {
socket.on('event1', (data) => {
that._arr.push(data);
});
});
}
}
不确定我是否理解您要做什么,但是您只需推送数组中的项目,它就会更新。
let arr = [];
io.on('connection', (socket) => {
socket.on('event1', (data) => {
if(data) {
arr.push(data);
}
});
});