SetTimeout для нескольких графиков в реальном времени

0

Я хочу иметь несколько графических карт в реальном времени. У меня есть работа с одной графикой, где все обновляется в реальном времени с помощью этой функции:

        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 который я добавляю.

Теги:
flot

1 ответ

1

Проблема заключается в том, что вы объявляете новый тайм-аут для каждого графика каждый раз, когда запускается функция тайм-аута. Это приведет к вызову функции с экспоненциально возрастающей частотой, что очень плохо... Что делать, если вы это сделаете так:

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();
  • 0
    Я недостаточно хорошо понимаю setTimeout , поэтому, наверное, поэтому я борюсь. Также я только что попробовал это решение, но кажется, что функция никогда не вызывается
  • 0
    Мне жаль. Я явно устал, когда ответил вчера. Вы все еще должны иметь setTimeout внутри функции обновления, но не внутри каждого цикла. Таким образом, вы будете устанавливать ровно один новый тайм-аут при каждом запуске функции обновления, а не один для каждого графика. Я обновил свой ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню