0
npm-mqttを使用して、別のmqttブローカからデータを取得しています。mqttコールバックスコープ外のアクセスクラスプロパティ
受信した各メッセージで、データをクラス/コンポーネント配列プロパティに追加したいとします。
しかし、クラスまたはそのプロパティにアクセスできません。代わりにスコープは、私はmqttクライアントクラスオブジェクトに入っていると言います。ここで
はコードの例です:
this.mydata: Array<any> = [];
private fetchWithMqtt(){
var client = mqtt.connect('ws://' + this.ip + ":" + Number(this.port) + "/mqtt");
// set callback handlers
client.on('close', this.onConnectionLost);
client.on('message', this.onMessageArrived);
client.on('connect', this.onConnect);
}
private onMessageArrived(topic, message) {
let tempDataset = JSON.parse(message).dataset;
this.mydata.push({ //this.mydata is undefined because this = mqtt-client
x: tempDataset[0],
y: tempDataset[1]
});
私は、この範囲外の私のクラスのプロパティにデータをプッシュすることができますどのように?
あなたの第二のアプローチは、参照することによってではなく値でコピーですか?そうしないと、意図した通りに動作しません。 – Wandang
私の2番目のアプローチは 'this.mydata'を参照渡ししています。参照時に' this'はまだmqttではなくクラスインスタンスです。だから、 'this.mydata'を呼び出すだけで、イベントのトリガが問題にならないときの現在のコンテキストは、常に同じ配列を前に置いているためです。私は可能な限り頻繁に最初の解決策をとるつもりですが、何らかの理由でクライアントにアクセスする必要がある場合は、回避策を投稿するようにしたいと考えていました。 –