2015-12-08 48 views
0

我有我的隊列設置像使用D3隊列做一個跨站點調用

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); 

然而,我準備功能不會被調用。我的控制檯沒有錯誤。我已經完成檢查以確保我的數據正在返回,並且我的數據集已加載了正確的數據。我不明白爲什麼我的隊列從不會調用我的ready函數。任何方向在這裏將非常感激。

+0

伊恩,queue.js不是D3,這是一個不同的庫。 –

+0

隊列由Mike Bostock提供,主要由d3.js用戶使用。我想保留這些標籤,以便D3用戶可以找到我的帖子。 –

+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. 
} 
+0

謝謝,你說得對。我不敢相信我沒有嘗試這一點,而試圖讓它工作。 –