2017-02-16 17 views
0

AMQJS0005E Внутренняя ошибка. Сообщение об ошибке: Невозможно прочитать свойство «подписаться» не определеноpaho 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); 
 
} 
 
    
 
    
 

 
    
 

 
}

+0

Это проблема охвата, 'this' не указывает на то, что вы думаете, это происходит, когда в' onConnect' Перезвони – hardillb

ответ

0

Ваша непосредственная задача разрешима путем изменения линии

this.client.connect({onSuccess:this.onConnect.bind(this)}); 

или, неожиданно для вас, с помощью удаления всех this. перед client и message ссылки.

Вы должны узнать, что именно означает this в JavaScript. Не то же самое, что в Java или C#. Чтобы понять, почему работает удаление, узнайте о закрытии и функции стрелок.

Хорошая отправная точка (ваш вопрос может быть на самом деле помечено как дубликат этого один): How to access the correct `this` context inside a callback?