Javascript 设置多个实时flot图表的超时
我希望能够有多个实时flot图表。我使用的是一个flot图表,所有内容都通过此功能实时更新:Javascript 设置多个实时flot图表的超时,javascript,jquery,html,flot,Javascript,Jquery,Html,Flot,我希望能够有多个实时flot图表。我使用的是一个flot图表,所有内容都通过此功能实时更新: function updateOnce(plot) { plot.setData([{ label: 'G-force', data: getRandomData(), lines: { show: true } }]); plot.setupGrid();//sensorPlots[i] plot.
function updateOnce(plot)
{
plot.setData([{ label: 'G-force', data: getRandomData(), lines: { show: true } }]);
plot.setupGrid();//sensorPlots[i]
plot.draw();
setTimeout(function () { updateOnce(plot); }, 30);
}
现在的问题是,我正在动态生成绘图
,并将其添加到数组中。我如何设置这种类型的函数来迭代数组中的每个点,并在不影响其他点的情况下为数组中的每个点运行此函数
我试过这个:
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`
但这会导致我的图形随着我添加的每个
绘图越来越快。问题似乎是每次运行超时函数时,都会为每个绘图声明一个新的超时。这将导致函数的调用频率呈指数级增长,这是非常糟糕的。。。如果你这样做会怎么样:
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
,所以这可能就是我努力的原因。我也尝试了这个解决方案,但是似乎函数neever被调用了,我很抱歉。昨天我接电话时显然很累。您仍然需要将setTimeout放在update函数中,但不需要放在each循环中。这样,每次运行更新函数时,您将恰好设置一个新超时,而不是为每个绘图设置一个。我已经更新了我的答案。