2013-08-14 3 views
1

Я использую WebSockets для получения пакета данных, который необходимо отправить двум различным canvas es с идентификаторами magnitude1 и magnitude2. Есть графики, которые рисуются на этих canvas es, и я хочу периодически обновлять графики новыми данными. Однако, когда я вызываю функцию, которая отправляет данные в правильный элемент, моя консоль показывает, что данные отправляются на magnitude1 один раз, magnitude2 один раз, а затем данные отправляются только на magnitude1 для обновления. Вот мой код:Как отправить данные элементу с определенным идентификатором с помощью JavaScript?

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); я перехожу в nodeID как index. Часть конструктора, которая говорит 'magnitude' + index, должна определить idcanvas, в которой я хочу создать график. Я думаю, что это ошибка. Я хочу, чтобы иметь возможность обновить оба графика, объединив setInterval, readMagPacket и Mag, но это только кажется освежающим только magnitude1. Когда я посмотрел на свою консоль, чтобы увидеть, что происходит, я увидел, что все пакеты были отправлены сначала, а затем readMagPacket был вызван впоследствии. В идеале я бы хотел, чтобы readMagPacket вызывался для каждого проходящего пакета. Есть ли способ исправить код, чтобы это произошло?

+0

Почему вы используете setInterval? – bfavaretto

ответ

1

Вы повторно вызываете readMagPacket с теми же данными, когда каждый пакет прибывает. Я считаю, что он будет работать так, как вы хотите, если вы удалите вызов setInterval и сразу вызовите readMagPacket.

+0

Да, это сработало. Спасибо за помощь. – rafafan2010

Смежные вопросы