加载多个CSV,并将每个CSV存储在单独的数组中

时间:2018-09-12 11:44:11

标签: javascript d3.js

我正在努力将数组分配给已加载的CSV文件。我正在使用D3的d3.queue()方法来加载它们,但似乎它们都已分配给了同一数组..这不是我想要的。

var csvOne;
var csvTwo;
var csvThree;

var q = d3.queue();
    ['csv1.csv', 'csv2.csv', 'csv3.csv'].map((c) => {
    q.defer(d3.csv, c);
});

q.awaitAll(function(error, csv1, csv2, csv3) {
    csvOne = csv1[0];
    csvTwo = csv2[0];
    csvThree = csv3[0]
});

console.log(csvOne);
console.log(csvTwo);
console.log(csvThree);

您知道我如何一次加载多个CSV并将它们分别分配到单独的数组吗?

欢呼

根据下面的答案编辑为当前代码

var csvOne;
var csvTwo;
var csvThree;

var q = d3.queue();
    ['data/csv1.csv', 'data/csv2.csv', 'data/csv3.csv'].map((c) => {
});

q.awaitAll(function(error, [csv1 , csv2 , csv3]){
    csvOne = csv1;
    csvTwo = csv2;
    csvThree = csv3;
});

console.log(csvOne);
console.log(csvTwo);
console.log(csvThree);

1 个答案:

答案 0 :(得分:0)

queue.await()相反,后者将每个延迟任务的结果作为附加参数传递给回调,queue.awaitAll()将结果数组作为回调的第二个参数传递。

您的问题的解决方案是使用.await()

q.await(function(error, csvOne , csvTwo , csvThree) {
    //...
});

或者,使用.awaitAll()并从该数组中获取单个结果:

q.awaitAll(function(error, [csvOne , csvTwo , csvThree]) {
    //...
});

但是请注意臭名昭著的"How do I return the response from an asynchronous call?"。现在的方式将不可避免地导致后续问题。