added cleartimeout in case client is already ended

This commit is contained in:
Tarun Singh 2022-01-20 13:20:54 -05:00
parent 22256dfcd2
commit 0345719e53
1 changed files with 9 additions and 7 deletions

View File

@ -99,6 +99,12 @@ exports.mqttAsync = function (hostname, topic, okMessage, options = {}) {
hostname = "mqtt://" + hostname;
}
const timeoutID = setTimeout(() => {
debug("MQTT timeout triggered");
client.end();
reject("Timeout");
}, interval * 1000);
debug("MQTT connecting");
let client = mqtt.connect(hostname, {
@ -114,26 +120,22 @@ exports.mqttAsync = function (hostname, topic, okMessage, options = {}) {
client.on("error", (error) => {
client.end();
clearTimeout(timeoutID);
reject(error);
});
client.on("message", (messageTopic, message) => {
if (messageTopic == topic) {
client.end();
clearTimeout(timeoutID);
if (message.toString() === okMessage) {
client.end();
resolve(`Topic: ${messageTopic}; Message: ${message.toString()}`);
} else {
client.end();
reject(new Error(`Error; Topic: ${messageTopic}; Message: ${message.toString()}`));
}
}
});
setTimeout(() => {
client.end();
reject("Timeout");
}, interval * 1000);
});
};