我正在努力将数组分配给已加载的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);
答案 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?"。现在的方式将不可避免地导致后续问题。