我的队列设置如
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);
但是,我的就绪函数永远不会被调用。我的控制台没有错误。我已经做了检查以确保我的数据被返回并且我的dataSet加载了正确的数据。我不明白为什么我的队列从不调用我的准备功能。这里的任何方向都会非常感激。
答案 0 :(得分:1)
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.
}