如何将相同的值发布到名称不同的主题,每个主题的延迟都不同

时间:2019-06-10 17:51:02

标签: javascript mqtt paho

我正在寻找一种方法,可以将相同的值(从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);
}

0 个答案:

没有答案