我已经浏览了多个页面和示例,这对我来说不起作用,所以我可能做了一些非常明显错误的事情,但不能为我的生活弄清楚:
d3.csv("example.csv", function(d) {
return {
year: new Date(+d.Year, 0, 1), // convert "Year" column to Date
make: d.Make,
model: d.Model,
length: +d.Length // convert "Length" column to number
};
}, function(error, rows) {
console.log(rows);
});
点击“功能(错误,行)”后,我的行记录得很好并且已成功加载。所以我试着做了
var dataset = d3.csv(etc etc
将console.log更改为
return rows;
或将console.log更改为
dataset = rows;
然而,在请求之后它无法正常工作,我无法访问数据。
答案 0 :(得分:0)
d3.csv
不会返回数据供您分配,因为您正在尝试这样做。原因是d3.csv
是异步函数。
异步函数不返回其结果。实际上,异步函数通常对应于可能很长的操作(就像在这种情况下加载可能很大的csv文件一样)。如果函数仅在操作结束后才返回,那么它可以返回结果,浏览器将等待操作而无法对任何其他用户输入作出反应(想象在等待时无法滚动) downlad a file!)
异步函数提供结果的一种常见方法是通过回调:作为参数传递的函数,当结果可用时将调用该函数,并将此结果作为参数。您已经在使用此回调:这是执行日志记录的功能。
因此,您的解决方案是将所有使用数据集的代码放在该回调中。像那样:
d3.csv("example.csv", function(d) {
return {
year: new Date(+d.Year, 0, 1), // convert "Year" column to Date
make: d.Make,
model: d.Model,
length: +d.Length // convert "Length" column to number
};
}, function(error, dataset) {
// put here the code that makes use the dataset
// e.g. drawing a graph, or showing a table
// you won't be able to use dataset out of this function!
});