如何在继续之前等待csv加载/处理(NVD3示例lineChart.html)

时间:2017-09-09 21:44:45

标签: d3.js nvd3.js

使用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];

0 个答案:

没有答案