javascript - 无法从 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);
}
解决方案
“已解决”@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);
}