我很高兴使用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数据正确地转向对象,但是数据的第一个元素出现错误?
我感谢任何人的帮助。显然我想加载多个文件,但我现在只是从一个文件开始。
答案 0 :(得分:0)
答案 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会更顺利。