paho mqtt javascript客户端无法订阅主题
问题描述:
AMQJS0005E内部错误。错误消息:无法读取属性'订阅'undefinedpaho mqtt javascript客户端无法订阅主题
我在我的应用程序中包含了eclipse paho javascript客户端库。 连接建立但我无法订阅一个主题。 这里是我使用的代码..
import { Component } from '@angular/core';
import { NavController, NavParams ,MenuController } from 'ionic-angular';
import { Setuser } from '../../providers/setuser';
import { Platform } from 'ionic-angular';
import { Paho} from 'ng2-mqtt/mqttws31';
/*
Generated class for the Usershome page.
See http://ionicframework.com/docs/v2/components/#navigation for more info on
Ionic pages and navigation.
*/
@Component({
selector: 'page-usershome',
templateUrl: 'usershome.html'
})
export class UsershomePage {
client :any;
message :any;
constructor(public navCtrl: NavController, public navParams: NavParams,public menu:MenuController,public setUserProvider: Setuser,public platform:Platform) {
\t this.menu.open();
}
ionViewDidLoad() {
this.menu.enable(true);
console.log('ionViewDidLoad UsershomePage');
}
exitApp(){
console.log("----------");
this.platform.exitApp();
}
connectToMqtt(){
this.client = new Paho.MQTT.Client("test.mosquitto.org",8080,"abc");
// set callback handlers
this.client.onConnectionLost = this.onConnectionLost;
this.client.onMessageArrived = this.onMessageArrived;
// connect the client
this.client.connect({onSuccess:this.onConnect});
}
// called when the client connects
onConnect() {
// Once a connection has been made, make a subscription and send a message.
console.log("onConnect");
this.client.subscribe("mitsuruog");
this.message = new Paho.MQTT.Message("Hello");
this.message.destinationName = "World";
this.client.send(this.message);
}
// called when the client loses its connection
onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
// called when a message arrives
onMessageArrived(message) {
console.log("onMessageArrived:"+message.payloadString);
}
}
答
立即解决问题是可以解决的通过修改线
this.client.connect({onSuccess:this.onConnect.bind(this)});
,或者令人惊讶的你,通过移除所有this.
在client
和message
前提及。
你应该知道在JavaScript中究竟意味着什么this
。与Java或C#中的不一样。要了解清除工作的原因,请了解关闭和箭头功能。
很好的起点(您的问题可以真正标记为这一个副本): How to access the correct `this` context inside a callback?
这是一个范围问题,'this'没有指向你所想的'onConnect'当它回电话 – hardillb