Я хочу иметь несколько графических карт в реальном времени. У меня есть работа с одной графикой, где все обновляется в реальном времени с помощью этой функции:
function updateOnce(plot)
{
plot.setData([{ label: 'G-force', data: getRandomData(), lines: { show: true } }]);
plot.setupGrid();//sensorPlots[i]
plot.draw();
setTimeout(function () { updateOnce(plot); }, 30);
}
Теперь проблема заключается в том, что я динамически генерирую plot
и добавляю его в массив. Как я мог настроить этот тип функции для итерации каждого массива и запускать эту функцию для каждого графика в массиве, не затрагивая других?
Я пробовал это:
function updateOnce()
{
$.each(sensorPlots, function (i, val) {
val.setData([{ label: 'G-force', data: getRandomData(), lines: { show: true } }]);
val.setupGrid();//sensorPlots[i]
val.draw();
setTimeout(updateOnce, 30);
});
}
sensorPlots is an array filled with 'plots'
но затем это заставляет мой график двигаться быстрее и быстрее с каждым plot
который я добавляю.
Проблема заключается в том, что вы объявляете новый тайм-аут для каждого графика каждый раз, когда запускается функция тайм-аута. Это приведет к вызову функции с экспоненциально возрастающей частотой, что очень плохо... Что делать, если вы это сделаете так:
function updateOnce() {
$.each(sensorPlots, function (i, val) {
val.setData([{ label: 'G-force', data: getRandomData(), lines: { show: true}}]);
val.setupGrid();//sensorPlots[i]
val.draw();
});
setTimeout(updateOnce, 30);
}
updateOnce();
setTimeout
, поэтому, наверное, поэтому я борюсь. Также я только что попробовал это решение, но кажется, что функция никогда не вызывается