我正在寻找一种方法,可以将相同的值(从html输入中获取的数字)发布到多个名称不同的主题。
对于每个主题,必须延迟其值,所以我使用的是window.setTimeout()
在Array tabDel []中发现了相同数量的不同主题,但是延迟不同(一个主题有一个延迟)
因此,例如,我想在延迟0时将数字421发布到主题ESP0 / ledstate,然后在延迟500ms时将相同的421发布到主题ESP1 / ledstate,然后在延迟1000ms时将数字421发布到ESP2 / ledstate
当然,如果我只有3个主题需要3个不同的延迟发布,那很简单,但是该项目可以有100个主题。
问题是我无法同时获得延迟值和在不同主题上发布的值:我无法获得在相应主题上具有相应延迟的值发布(所有值均由for循环驱动)< / p>
因此,正如我所说的,我正在使用“ for”循环。
该问题似乎来自client.send(message),因为其他所有内容都毫无问题地考虑了for循环。
Version: 5.2.3.0 has ViewBag in ViewData: True
这是html:
var xTopic = 3; // 100 …
function joueursCascade(){
for (var i = 0; i <= xTopic; i++) //
{
doSetTimeout(i);
}
}
function doSetTimeout(i)
{
// - m : payload from html input
message = new Paho.MQTT.Message(document.getElementById('btn3').value);
// -t : several topics from several html input (input id=esp1, id=esp2…)
// .value is the topic : ESP0/ledstate, ESP1/ledstate etc..
message.destinationName = document.getElementById('esp'+i).value;
//delays Array
var del = tabDel[i];
//PUBLISH message ISSUE : I tryed
//1)this publish same message on all topics but with no delays, ok
mon_client.send(message);
//2) this publish message for the higher topic in the loop at successive delays
window.setTimeout(function(){sendMess(message);}, del);
//3) same than 2)
window.setTimeout(function(){mon_client.send(message);}, del)
//monitor
console.log('esp'+i);
console.log("doSetTimeout "+document.getElementById('btn3').value);
console.log("message.destinationName: " + message.destinationName);
console.log(del);
}
function sendMess(message)
{
mon_client.send(message);
}