【问题标题】:Eclipse Paho - MQTT Javascript - how access onMessageArrived from outsideEclipse Paho - MQTT Javascript - 如何从外部访问 onMessageArrived
【发布时间】:2017-08-07 15:48:02
【问题描述】:

我正在使用 Eclipse Paho - Mqtt javascript 库。

试图从外部函数访问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一样把它放在那里?

【问题讨论】:

    标签: javascript mqtt paho


    【解决方案1】:

    您可以将消息负载存储在一个全局变量中,以便稍后再次访问它,或者您可以在 onMessageArrived() 回调中进行所有您需要的处理。

    必须这样,因为onMessageArrived() 是异步的,它可能永远不会被调用,或者它可能会被调用多次,完全取决于该主题的消息速率。

    编辑(示例):

    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 示例添加
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多