如何在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 在回调中 未加强 。我想这是因为这个引用了回调函数本身...
答案 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
从长远来看更容易,更灵活。因为你可以做更具体的事情。例如.. 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);
});
});
}
}