socketio的陷阱

如果我们用window.socket这种全局的方式保存和使用socket,当我们用window.socket.on(‘event-name’,self.callback.bind(self))来申请监听时,当我们第一次进入这个场景时 如果有window.socket.emit(“event-name”)发生,那么将会成功调用callback并且里面也可以用this.node访问节点的信息。但是注意了,当我们切换了场景并且再重新切换回来写了监听的场景时,回调仍旧会工作,可是this指向的是原来的节点,而这个原来的节点在切换场景时已经销毁了,所以有必要在切换了场景然后切回来原先场景后,重新注册监听事件,相应地,应该在离开场景时注销监听
window.socket.removeAllListeners(“event-name”)

其实所有的回调,都会存在这样的问题,不单单是 socketio。
一个比较规范的做法,是在所有回调中,判断一下 this.isValid 或者 this.node.isValid

噢 我明白了。。