Я пытаюсь сделать несколько вещей при подключении к моему брокеру MQTT, я создал провайдера mqtt в своем приложении ionic 2, angular 2, провайдер указан ниже:
import { Component } from '@angular/core';
import { NavController, ViewController } from 'ionic-angular';
import { Observable } from 'rxjs/Observable';
import { Paho } from 'ng2-mqtt/mqttws31';
@Component({
selector: 'page-greywater',
templateUrl: 'greywater.html'
})
export class MQTT_Greenchain {
private _client: Paho.MQTT.Client;
private options = {
userName: 'rdjghvoh',
password: 'w7Ex0VTqZViw',
timeout: 30,
useSSL:true,
onSuccess:this.onConnected,
};
private topic: string;
public displayedMessage: string;
public mes: Paho.MQTT.Message;
public constructor() {
this._client = new Paho.MQTT.Client(
"m20.cloudmqtt.com",
Number(30775),
"",
"peter"
);
this._client.onConnectionLost = (responseObject: {errorCode: Number, errorMessage: string}) => {
console.log('poes');
console.log(responseObject.errorMessage);
};
this._client.onMessageArrived = (message: Paho.MQTT.Message) => {
this.onMessageArr(message);
console.log('Message arrived.');
};
this.topic = "haha";
this.displayedMessage = "what I was";
}
connectMe() {
console.log("MQTT OPTIONS: " + this.options);
this._client.connect(this.options);
}
private onConnected(): void {
console.log('Connected to broker.');
this._client.subscribe(this.topic);
this.mes = new Paho.MQTT.Message("-1"); // -1 => Notify
this.mes.destinationName = this.topic;
this._client.send(this.mes);
}
private onMessageArr(message: Paho.MQTT.Message){
this.displayedMessage = message.payloadString;
}
}
Я смог без проблем вызвать следующее в angular 1, и я смог заставить работать все, что связано с MQTT. Функция в angular 1 выглядит следующим образом:
function onConnect() {
sharedUtils.hideLoading();
console.log("onConnect, CURRENT TOPIC: " + mqttData);
client.subscribe(mqttData.currentTopic);
}
В приведенном выше примере mqttData.currentTopic
— это просто строка.
Функция принимает 1 аргумент, хотя может принимать 2 (объект опций).
В угловом 2 машинописный текст дает мне ошибку:
Supplied parameters do not match any signature of call target
Почему мне не позволяет вызывать функцию с одним аргументом, как в angular 1? Если я передам {} в качестве второго аргумента:
this._client.subscribe(this.topic, {});
Мне дают ошибку, что:
AMQJS0005E Internal error. Error Message: Cannot read property 'subscribe' of undefined, Stack trace: TypeError: Cannot read property 'subscribe' of undefined
Это ошибка, полученная в параметре объекта ответа, переданная в функцию обратного вызова onConnectionLost.
Я совершенно уверен, что мой «this._client» не является неопределенным, поскольку сообщение «Подключено к брокеру». появляется в консоли, указывая на то, что onConnected, обратный вызов свойства onSuccess метода подключения был явно вызван?
Что я здесь не понимаю?