首页 > 解决方案 > 无法从 Javascript 中的 phao mqtt onMessageArrived 函数分配变量

问题描述

我正在将 Eclipse Paho 与 Javascript 一起使用,并且我正在尝试分配message.payloadstring给变量,我在脚本的开头声明了一个变量并在onMessageArrived函数中分配它,if(topic === "AVfanControl/DeviceName") deviceName = message.payloadString;以便我可以根据需要在其他地方使用它。但是,变量保持为未定义的共同点。我可以在 HTML 中看到设备名称,但如果我尝试这样做,console.log(document.getElementById("device_name").innerHTML);或者即使我可以在屏幕上的 HTML 中看到设备名称,我也会console.log(document.getElementById("device_name").innerText);得到一个空白。console.log

const client = new Paho.MQTT.Client(hostname, port, clientID);

client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;

client.connect({onSuccess:onConnect});

function onConnect() {
    client.subscribe("AVfanControl/DeviceName");
}

const devName = document.getElementById("device_name");
let deviceName;

function onMessageArrived(message) {
    let topic = message.destinationName;
    if(topic === "AVfanControl/DeviceName"){
        deviceName = message.payloadString;
        devName.innerHTML = message.payloadString;
    }
}
console.log(deviceName); // undefined
console.log(document.getElementById("device_name").innerText); // blank log
console.log(document.getElementById("device_name").innerHTML); // blank log

function onConnectionLost(responseObject) {
    if (responseObject.errorCode !== 0) {
      console.log("onConnectionLost:"+responseObject.errorMessage);
    }
  }
  
  // // function to compile the string to sens as MQTT
  function messageString(input){
      return new Paho.MQTT.Message(input);
}

标签: javascriptmqtt

解决方案


“已解决”@Brits 谢谢,正如您建议的那样,我需要一个计时器来在初始日志之后更新日志,以便有时间让第一条消息通过谢谢您的输入!

const client = new Paho.MQTT.Client(hostname, port, clientID);

client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;

client.connect({onSuccess:onConnect});

function onConnect() {
    client.subscribe("AVfanControl/DeviceName");
}

const devName = document.getElementById("device_name");
let deviceName;

function onMessageArrived(message) {
    let topic = message.destinationName;
    if(topic === "AVfanControl/DeviceName"){
        deviceName = message.payloadString;
        devName.innerHTML = message.payloadString;
    }
}

// interval to log devicename
setInterval(function(){
    console.log(deviceName);
    console.log(document.getElementById("device_name").innerHTML);
}, 1000);
    

function onConnectionLost(responseObject) {
    if (responseObject.errorCode !== 0) {
      console.log("onConnectionLost:"+responseObject.errorMessage);
    }
  }
  
  // // function to compile the string to sends as MQTT
  function messageString(input){
      return new Paho.MQTT.Message(input);
}

推荐阅读