使用 D3 Queue 进行跨站调用

Using D3 Queue to make a cross site call

我的队列设置如下

queue()
.defer(d3.json, "js/US.json")
.defer(d3.json, "http://192.168.1.40:8080/api/2014", function(d) { dataSet.set(d.id, +d.plant); })
.defer(d3.csv, "data/ph.csv", function(d) { phById.set(d.id, +d.ph); })
.awaitAll(ready);

但是,我的就绪函数从未被调用过。我的控制台没有错误。我已经完成检查以确保返回我的数据并且我的数据集加载了正确的数据。我不明白为什么我的队列从不调用我的就绪函数。任何方向都将不胜感激。

queue.defer()函数将一个额外的回调参数传递给传递给它的任务函数,它必须在任务函数完成时调用。在你的例子中,你正在调用 d3.json 任务函数,并传递给它两个参数,加上额外的回调参数(感谢 queue.defer)。

d3.json 方法需要两个参数 - url 和回调。它将接收三个参数,但只使用前两个。因此,来自 queue.defer() 的回调函数将不会被调用,并且 queue.awaitAll() 函数永远不会将任务视为已完成。

您需要将每个 .json 和 .csv 任务的结果传递给最终回调函数:

queue().defer(d3.json, "js/US.json")
       .defer(d3.json, "http://192.168.1.40:8080/api/2014")
       .defer(d3.csv, "data/ph.csv")
       .awaitAll(ready);

function ready(error, result1, result2, result3) {
  //do some things with your results here - these are the results passed
  //from each task.
}