2017-08-07 27 views
0

我正在使用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

回答

0

您可以將郵件負載存儲在全局變量中,以便您稍後可以再次訪問它,也可以在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