Eclipse Paho - MQTT Javascript - 如何从外部访问onMessageArrived
问题描述:
我正在使用Eclipse Paho - Mqtt JavaScript库。Eclipse Paho - MQTT Javascript - 如何从外部访问onMessageArrived
试图从外部函数访问onMessageArrived
:
mqttConnect(){
var client = new Paho.MQTT.Client("wss://test.mqtt.address", "myClientId");
this.connectionInfo = client;
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
client.connect({onSuccess:onConnect});
function onConnect() {
client.subscribe("some/path/to/subscribe/");
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
function onMessageArrived(message) {
console.log("onMessageArrived: "+message.payloadString);
return message.payloadString; //this does not work of course.
}
}
试图从外面像访问邮件:
_constract(){
var message = mqttConnect();
console.log(message);
}
也许注册一些全局变量,并把它放在那里像this.global = message.payloadString
?
答
您可以将邮件负载存储在全局变量中,以便您稍后可以再次访问它,也可以在onMessageArrived()
回调中完成所需的所有处理。
它必须这样,因为onMessageArrived()
是异步的,它可能永远不会被调用,或者它可能完全依赖于该主题的消息速率被调用很多次。
EDIT(例如):
var client;
var lastMsg;
function connect(){
client = new Paho.MQTT.Client("wss://test.mqtt.address", "myClientId");
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
client.connect({onSuccess:onConnect});
}
function onConnect() {
client.subscribe("some/path/to/subscribe/");
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
}
}
function onMessageArrived(message) {
console.log("onMessageArrived: "+message.payloadString);
lastMsg = message.payloadString;
}
connect();
setInterval(function() {
document.findElementById("foo").innerHTML = lastMsg;
}, 5000);
谢谢您的回答。你能举个例子吗? –
@ mr_e30添加了示例 – hardillb