D3队列仅产生错误

时间:2018-03-05 22:59:09

标签: javascript d3.js

我很高兴使用d3来帮助我处理一些数据但我在加载数据时遇到了一些问题。

我的.csv看起来像这样:

id,name,city,latitude,longitude,dpcapacity,online_date
456,2112 W Peterson Ave,Chicago,41.991178,-87.683593,15,2/10/2015 14:04:42

我的.js看起来像这样:

d3.queue()
  .defer(d3.csv, "/data/2017_Q1Q2/Stations.csv")
  .await(analyze);

function analyze(error, stations) {
  if(error) console.log("error", error);
}

然后我的错误是:

错误是{id:“456”,名称:“2112 W Peterson Ave”,城市:“芝加哥”,纬度:“41.991178”,经度:“ - 87.683593”,...} < / p>

我的.csv文件中有什么错误?为什么csv数据正确地转向对象,但是数据的第一个元素出现错误?

我感谢任何人的帮助。显然我想加载多个文件,但我现在只是从一个文件开始。

2 个答案:

答案 0 :(得分:0)

我不推荐使用我所关注的模块的格式。我发现它来自一个旧的但仍然有用的教程(找到here)从D3 5.0开始被弃用。相反,请改用d3-fetch

答案 1 :(得分:0)

d3-queue期望它调用的函数 - 比如此实例中的d3.csv - 使用(error, result)的参数调用它们的回调。正如您从d3.dsv文档中看到的那样,它并不遵循这种模式:如果您提供回调,则每行调用一次,并将该行作为第一个参数,而不是错误

如果您真的想使用d3.queue - 例如,如果您打算使用其货币支持 - 您可能需要执行类似

的操作
function getcsv(url, cb) {
  d3.csv(url).then(res => cb(null, res)).catch(cb);
}

为了使d3.csv像d3-queue那样行事。但是,如果您需要并发支持(最有可能的话),请考虑使用Promise.all:它还可以让您处理大量文件和可靠地等待他们全部完成,并且使用d3.csv等函数返回promises会更顺利。