试图在MQTT主题中订阅的问题 - Angular 5

时间:2018-05-31 23:21:20

标签: angular typescript mqtt

我正在尝试使用Angular 5订阅MQTT主题,我正在使用ng2-mqtt。 创建我的客户端后,我尝试连接,这是问题开始的时候。我收到此错误: AMQJS0012E forSuccess的未定义类型未定义

有谁知道我做错了什么?

import { Component, OnInit } from '@angular/core';


import {Paho} from 'ng2-mqtt/mqttws31';



@Component({
  selector: 'app-chart',
  templateUrl: './chart.component.html',
  styleUrls: ['./chart.component.css']
})
export class ChartComponent implements OnInit {

  client;

  constructor(){}

  ngOnInit() {
    this.client = new Paho.MQTT.Client('m2m.eclipse.org', 1883, 
    '_32fc96dd776142e6ba1a95116d09064f');

    this.client.connect({onSuccess: this.onConnected()})
  }

  onConnected() {
    console.log("Connected");
    this.client.subscribe("/cmd1234")
  }

 }

这是我的浏览器控制台: enter image description here

2 个答案:

答案 0 :(得分:0)

您正在指定返回值undefined

this.client.connect({onSuccess: this.onConnected()})

您需要删除()才能分配功能

this.client.connect({onSuccess: this.onConnected})

您正在使用函数中的this引用。

onConnected() {
   console.log("Connected");
   this.client.subscribe("/cmd1234")
}

当您使用this引用时,请确保使用bind以确保它仍然存在。

this.client.connect({onSuccess: this.onConnected.bind(this)})

我不会做以上任何一项。我会使用TypeScript匿名函数。

this.client.connect({onSuccess: () => this.onConnected() })

答案 1 :(得分:0)

我解决了。我刚刚更改了MQTT服务器的主机并没有通过端口,然后一切都很顺利

ngOnInit() {
   this.client = new Paho.MQTT.Client('ws://iot.eclipse.org/ws','_32fc96dd776142e6ba1a95116d09064f');

   this.client.connect({onSuccess:()=> this.onConnected()})
   this.client.onMessageArrived = this.onMessage.bind(this);

}