(已解决)打字稿/ MQTT /节点-如何从回调函数访问类成员?

安东尼·费里

我正在制作一个应用程序来管理我家里的一些智能灯。

我创建了一个非常简单的Broker类。

import * as aedes from 'aedes';
import * as net from 'net';

export class Broker {

    aedes: aedes.Aedes;
    broker: net.Server;
    port: number;

    constructor(port: number){
        this.aedes = aedes();
        this.broker = net.createServer(this.aedes.handle);
        this.port = port;
        this.broker.listen(this.port, () => {
            console.log('MQTT is listening.');
        });
    }
    
    /** 
     * This is a callback register function
     *
     * Callback function must have a signature of type : function(topic: string, payload: string)
     **/
    onMsgReceived(callback: {(topic: string, payload: string): void}){
        this.aedes.on('publish', (packet, client) => {
            if (packet.cmd != 'publish') return;
            callback(packet.topic, packet.payload.toString());
        });
    }

}

然后,例如,一个Test类。

export Test {
    someVar: string;
    
    constructor(){ }
    
    onMsgReceivedCallback(topic: string, payload: string){
        console.log('Hey, i\'m printed from the test class');
        console.log('And this is some var : ' + this.someVar);
    }
}

当然还有index.ts脚本。

import { Broker } from './broker.ts'
import { Test } from './test.ts'

const broker = new Broker(1883);
const test   = new Test();


broker.onMsgReceived(test.onMsgReceivedCallback);

问题是,如果在函数中test.onMsgReceived我想调用该类的成员(如var)someVar,则节点将抛出以下错误:

TypeError: Cannot read property 'testVar' of undefined

我不明白如何解决此错误...您有想法吗?

Dmytro

如果要将this类实例上下文作为回调传递,则必须将其绑定到方法。有两种方法可以在TypeScript中执行此操作。

使用箭头功能定义方法:

export Test {
    someVar: string;

    constructor() {}

    onMsgReceivedCallback = (topic: string, payload: string) => {
        console.log(`someVar: ${this.someVar}`);
    }
}

或在构造函数中绑定方法:

export Test {
    someVar: string;

    constructor() {
        this.onMsgReceivedCallback = this.onMsgReceivedCallback.bind(this);
    }

    onMsgReceivedCallback(topic: string, payload: string) {
        console.log(`someVar: ${this.someVar}`);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何解决打字稿节点定义编译错误?

来自分类Dev

如何使用打字稿编写节点模块?

来自分类Dev

如何使用打字稿编写节点模块?

来自分类Dev

如何在类本地方法之一中从Javascript回调访问打字稿类成员

来自分类Dev

打字稿+节点+快递?

来自分类Dev

如何获取节点红色中收到的mqtt消息的时间?

来自分类Dev

如何正确安装mosquitto(mqtt代理)以及如何设置MQTT节点红色?

来自分类Dev

如何将打字稿项目转换为节点包

来自分类Dev

打字稿,将函数数组转换为所有返回值的合并类型[已解决]

来自分类Dev

如何为导出函数的节点模块编写打字稿定义文件?

来自分类Dev

节点js回调函数

来自分类Dev

打字稿类成员函数分组

来自分类Dev

如何在打字稿中正确创建和导入节点模块

来自分类Dev

节点/打字稿:如何确保运行具有副作用的导入?

来自分类Dev

我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

来自分类Dev

我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

来自分类Dev

如何在打字稿中进行模块解析以输出到节点?

来自分类Dev

如何将节点应用程序从 javascript 逐渐移动到打字稿

来自分类Dev

从外部节点模块导入打字稿

来自分类Dev

卸载没有节点的打字稿

来自分类Dev

卸载没有节点的打字稿

来自分类Dev

从外部节点模块导入打字稿

来自分类Dev

通过打字稿设置节点库位置

来自分类Dev

打字稿:将 HTMLElement 转换为节点

来自分类Dev

如何使用类型防护解决接口的打字稿联合类型

来自分类Dev

如何解决打字稿查找类型中的错误?

来自分类Dev

如何解决topojson包的打字稿错误?

来自分类Dev

如何解决React应用上的打字稿错误

来自分类Dev

如何等待直到节点的回调函数执行

Related 相关文章

  1. 1

    如何解决打字稿节点定义编译错误?

  2. 2

    如何使用打字稿编写节点模块?

  3. 3

    如何使用打字稿编写节点模块?

  4. 4

    如何在类本地方法之一中从Javascript回调访问打字稿类成员

  5. 5

    打字稿+节点+快递?

  6. 6

    如何获取节点红色中收到的mqtt消息的时间?

  7. 7

    如何正确安装mosquitto(mqtt代理)以及如何设置MQTT节点红色?

  8. 8

    如何将打字稿项目转换为节点包

  9. 9

    打字稿,将函数数组转换为所有返回值的合并类型[已解决]

  10. 10

    如何为导出函数的节点模块编写打字稿定义文件?

  11. 11

    节点js回调函数

  12. 12

    打字稿类成员函数分组

  13. 13

    如何在打字稿中正确创建和导入节点模块

  14. 14

    节点/打字稿:如何确保运行具有副作用的导入?

  15. 15

    我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

  16. 16

    我如何使用Angular中的打字稿获取JSON中特定嵌套节点的数量?

  17. 17

    如何在打字稿中进行模块解析以输出到节点?

  18. 18

    如何将节点应用程序从 javascript 逐渐移动到打字稿

  19. 19

    从外部节点模块导入打字稿

  20. 20

    卸载没有节点的打字稿

  21. 21

    卸载没有节点的打字稿

  22. 22

    从外部节点模块导入打字稿

  23. 23

    通过打字稿设置节点库位置

  24. 24

    打字稿:将 HTMLElement 转换为节点

  25. 25

    如何使用类型防护解决接口的打字稿联合类型

  26. 26

    如何解决打字稿查找类型中的错误?

  27. 27

    如何解决topojson包的打字稿错误?

  28. 28

    如何解决React应用上的打字稿错误

  29. 29

    如何等待直到节点的回调函数执行

热门标签

归档