1

我正在使用 WebSockets 接收一个数据包,该数据包需要发送到两个不同的canvases,其 ID 称为magnitude1magnitude2。在这些canvases 上绘制了图表,我希望定期用新数据刷新图表。但是,当我调用将数据发送到正确元素的函数时,我的控制台显示数据被发送magnitude1一次,magnitude2一次,然后数据只被发送到magnitude1刷新。这是我的代码:

dataCollector.onmessage = function(evt)
{
        console.log("onmessage is being called");
        var realData = new Float32Array(evt.data); //data is expected in the format [nodeID,(256 floats)]
        setInterval(function(){readMagPacket(realData);},1000);
}

function readMagPacket(theGoods)
{
    var nodeID = theGoods[0];
    console.log("The node ID is " + nodeID);
    var magnitude = new Array();
    for(var i = 1; i < theGoods.length; i++)
    {
            magnitude[i-1] = theGoods[i];
    }

   console.log("The length of packet " + nodeID + " is " + magnitude.length);

   graphMagnitude(magnitude,nodeY,freqRange);

   Mag(magnitude,nodeID,freqRange);
}

function Mag(magnitude,index,freqRange)
{
    console.log("Mag is called");

    var magPlot = new RGraph.Bar('magnitude'+index,magnitude);

    magPlot.Set('labels',freqRange);
    magPlot.Set('gutter.left',100);
    magPlot.Set('gutter.bottom',40);
    magPlot.Set('ymax',.01);
    magPlot.Set('ymin',0);
    magPlot.Set('backgroun.grid',true);
    magPlot.Set('numyticks',2);
    magPlot.Set('title','Magnitude of Channel ' + index);
    magPlot.Set('title.yaxis','Magnitude (dB)');
    magPlot.Set('title.xaxis','Frequency (MHz)');
    magPlot.Set('title.xaxis.pos',.2);
    magPlot.Set('title.yaxis.pos',.5);
    magPlot.Set('background.color','white');
    magPlot.Set('colors',['green']);
    magPlot.Set('hmargin',.00001);

    magPlot.Draw();
}

更多细节:我想通过套接字获取数据包作为浮点数并将它们存储在realData. 我想将它传递给一个函数,该函数nodeID将数据包中的第一个数字与其余数据分开。我将使用它来确定canvas将数据发送到哪个。在行var magPlot = new RGraph.Bar('magnitude'+index,magnitude);中,我传递了nodeIDas index。构造函数中所说的部分'magnitude' + index应该确定我要在其中创建图形的部分idcanvas我认为这就是错误所在。我希望能够通过组合setIntervalreadMagPacket和来刷新这两个图表Mag,但它似乎只是在刷新magnitude1而已。当我查看控制台查看发生了什么时,我看到所有数据包都先发送,然后再发送readMagPacket后来被叫了。理想情况下,我希望readMagPacket收到每个通过的数据包。有没有办法修复代码以实现这一点?

4

1 回答 1

1

当每个数据包到达时,您正在使用相同的数据重复调用 readMagPacket。如果您删除 setInterval 调用并直接调用 readMagPacket,我相信它会按您的意愿工作。

于 2013-08-14T03:27:13.537 回答