在Socket.IO回调中更新变量

时间:2018-03-09 11:09:30

标签: javascript

如何在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 在回调中 未加强 。我想这是因为这个引用了回调函数本身...

2 个答案:

答案 0 :(得分:1)

不确定我是否理解您正在尝试做的事情,但您只需推送数组中的项目即可更新。

html, body {
	overflow-x: hidden;
	width: 100%;
	height: 100%;
	font-family: "Open Sans"
}
.jumbotron {
	background-color: #23103a;
	color: #FF6C00;
}
.cmpnt {
	float: left;
}
.btn {
	background-color: #a0204c;
	border-color: #a0204c;
}

答案 1 :(得分:1)

How could be this._arr array updated inside a socket.io callback?

我这样做的最简单方法是使用that = this编码样式捕获对象的范围。

PS。虽然使用箭头函数来保持范围,但我认为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);
        });    
    });
 }
}