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); 
+0

谢谢您的回答。你能举个例子吗? –

+0

@ mr_e30添加了示例 – hardillb