首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类中的Node.js调用父方法

类中的Node.js调用父方法
EN

Stack Overflow用户
提问于 2022-08-05 19:25:28
回答 1查看 55关注 0票数 0

我试图在类内发出一个事件。

但我找不到方法来调用父方法。

请看评论行,以了解我想做什么。

这是我的VirtualChart.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
var VirtualChart = require('./VirtualChart');

var virtualChart = new VirtualChart();

virtualChart.on("newMessage", (param) => {

    console.log("newMessage " + param);

});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-05 20:53:51

我确实看到了一个问题。thisthis.emit()中的值可能是错误的,因为它是由connection.on()处理程序设置的,不会指向对象。您可以使用箭头函数来修复我的回调函数,而不是普通函数。

改变这一点:

代码语言:javascript
运行
复制
    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);
            }
        });
    });

为此(它使用箭头函数进行回调):

代码语言:javascript
运行
复制
    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的值将由回调的调用方设置(它不知道您的对象)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73254467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档