使用NVD3示例中的lineChart.html,我已按以下方式替换了代码:
//data = sinAndCos();
data = getDataIntensity();
function getDataIntensity() {
mySet = {};
mySet.values = [];
mySet.key = "Intensity";
mySet.color = "#ff7f0e";
mySet.strokeWidth = 4;
d3.csv('20170906perfmix.csv', function(dat) {
dat.forEach(function(d,i) {
mySet.values.push({x: i, y: +d.Intensity});
});
});
return [mySet];
}
我收到No Data Available消息。我添加了一个按钮来调用chart.update(),然后数据显示正确。我理解这可能是因为事情正在异步运行并且[mySet]的返回发生在所有数据点被推送到'值之前。阵列。
如何在返回之前让此函数等待所有数据值完成?
更新:现在我对发生的事情感到困惑...如果我在从getDataIntensity()返回之前调试console.log(mySet),那么在使用Chrome检查器时,所有值都会出现。在调用chart.update()之后,我确实看到了一个成员' seriesIndex'已在数据对象中设置为0。在返回之前在mySet中设置此值无效。我在浏览器的第一次加载时收到No Data消息。
Update2:通过在回调
中调用chart.update()来修复代码d3.csv('20170906perfmix.csv', function(dat) {
dat.forEach(function(d,i) {
mySet.values.push({x: i, y: +d.Intensity});
});
chart.update(); // fixes issue
});
return [mySet];