更新回调 Socket.IO 变量



如何在 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我仍然认为它更容易、更灵活。因为您也可以做更具体的事情。例如。 thisSocketClassthisEvent等。

例如。

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);
        }
    });
});

最新更新