Я использую 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
, должна определить id
canvas
, в которой я хочу создать график. Я думаю, что это ошибка. Я хочу, чтобы иметь возможность обновить оба графика, объединив setInterval
, readMagPacket
и Mag
, но это только кажется освежающим только magnitude1
. Когда я посмотрел на свою консоль, чтобы увидеть, что происходит, я увидел, что все пакеты были отправлены сначала, а затем readMagPacket
был вызван впоследствии. В идеале я бы хотел, чтобы readMagPacket
вызывался для каждого проходящего пакета. Есть ли способ исправить код, чтобы это произошло?
Почему вы используете setInterval? – bfavaretto