我试图在类内发出一个事件。
但我找不到方法来调用父方法。
请看评论行,以了解我想做什么。
这是我的VirtualChart.js
var WebSocketClient = require('websocket').client;
const EventEmitter = require("events");
class VirtualChart extends EventEmitter {
constructor() {
super();
this.client = new WebSocketClient();
this.client.on('connectFailed', function(error) {
console.log('Connect Error: ' + error.toString());
});
this.client.on('connect', function(connection) {
console.log('WebSocket Client Connected');
connection.on('error', function(error) {
console.log("Connection Error: " + error.toString());
});
connection.on('close', function() {
console.log('echo-protocol Connection Closed');
});
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log("Received: '" + message.utf8Data + "'");
this.emit("newMessage", message.utf8Data);//here is the problem
//this.parent.emit("newMessage", message.utf8Data);??????
//this.parent.parent.emit("newMessage", message.utf8Data);??????
}
});
});
this.client.connect('wss://myurl.com');
}
}
这是我的main.js
var VirtualChart = require('./VirtualChart');
var virtualChart = new VirtualChart();
virtualChart.on("newMessage", (param) => {
console.log("newMessage " + param);
});
发布于 2022-08-05 20:53:51
我确实看到了一个问题。this
在this.emit()
中的值可能是错误的,因为它是由connection.on()
处理程序设置的,不会指向对象。您可以使用箭头函数来修复我的回调函数,而不是普通函数。
改变这一点:
this.client.on('connect', function(connection) {
console.log('WebSocket Client Connected');
connection.on('error', function(error) {
console.log("Connection Error: " + error.toString());
});
connection.on('close', function() {
console.log('echo-protocol Connection Closed');
});
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log("Received: '" + message.utf8Data + "'");
this.emit("newMessage", message.utf8Data);
}
});
});
为此(它使用箭头函数进行回调):
this.client.on('connect', connection => {
console.log('WebSocket Client Connected');
connection.on('error', error => {
console.log("Connection Error: " + error.toString());
});
connection.on('close', () => {
console.log('echo-protocol Connection Closed');
});
connection.on('message', message => {
if (message.type === 'utf8') {
console.log("Received: '" + message.utf8Data + "'");
this.emit("newMessage", message.utf8Data);
}
});
});
箭头函数将保留this
的词法值。常规的function(...)
回调不会,this
的值将由回调的调用方设置(它不知道您的对象)。
https://stackoverflow.com/questions/73254467
复制相似问题