Tengo un cliente Mqtt. Lo necesito para publicar cada elemento con un intervalo de 5 segundos y recibir cada uno en la devolución de llamada on_message . Pero mi código publica cada elemento con el mismo número de veces que la longitud de la matriz.
Ejemplo -
Mi código
var mqtt = require('mqtt'); var client = mqtt.connect("mqtt://broker.emqx.io:1883",{clientId:"mqtt_AYA"}); var arr = [1,2,3,4]; var options={ retain:true, qos:1}; client.on("connect",function(){ console.log("connected "+ client.connected); }) arr.forEach(no => { client.on('message',function(topic, message, packet){ console.log("message is "+ JSON.parse(message)); // console.log("topic is "+ topic); }); setInterval(function(){client.publish('/topic', JSON.stringify(no), options)},5000); client.subscribe('/topic', {qos:1}); });Resultado -
connected true message is 1 message is 1 message is 1 message is 1 message is 2 message is 2 message is 2 message is 2 message is 3 message is 3 message is 3 message is 3 message is 4 message is 4 message is 4 message is 4 [5 secs interval] Repetition of abovePero yo necesito -
connected true message is 1 [5 secs interval] message is 2 [5 secs interval] message is 3 [5 secs interval] message is 4 [5 secs interval] and end the clientSu intervalo establecido y suscripción están en el bucle forEach. Esto significa que está comenzando 4 intervalos al mismo tiempo. Dado que cada valor se suscribe a cada mensaje, obtienes 4 suscriptores. Cuando todos los setIntervals publican el mensaje al mismo tiempo, los 4 suscriptores muestran el mensaje. Por lo tanto, obtener el resultado que ves.