2015-02-06 97 views
0

我在javascript中很新,並且沒有找到我的問題的答案。如何在包含異步函數的循環之後完成某件事

實際上,我使用for循環來獲取多個csv文件的內容,並將每個內容添加到全局csvstring中,以便在最後下載總csv文件。但是每個csv的內容都是用異步的d3.csv獲得的,所以如果我在d3.csv中更新了我的總csvstring,那麼因爲csvstring還沒有更新,我不能用它來保存之後的總csv。我應該怎麼做?

我的代碼,這是不工作的,如下:

//here is code to define the queries 
csvstring = ""; 
for (i=0 ; i<queries.length ; ++i) { 
    d3.csv(queries[i], function(data) { 
    //here is code to format data as a csvstring and then 
    csvstring += data_as_csvstring; 
    } 
}); 
//here is code to download csvstring as a csvfile 

我希望我自己清楚,我感謝你提前爲您解答!

Mag

+0

可能的解決方案:http://stackoverflow.com/questions/23690356/how-to-load-multiple-csv-files-and-use-them-mixed-with-each-other – Andy 2015-02-06 17:17:41

+0

[隊列。 js](https://github.com/mbostock/queue)使得您必須更輕鬆地檢索未知數/許多數據文件。 – 2015-02-06 18:05:04

回答

1

你可以做一些遞歸併等到你最後一次查詢做某件事情?

var getCsv = function(queries, csvstring, startAt, callback){ 
     d3.csv(queries[startAt], function(data) { 
      csvstring += data_as_csvstring; 
      if(index == queries.length){ 
       callback(csvstring); 
      } else { 
       getCsv(queries, csvstring, startAt++, callback); 
      } 
     }); 
    } 

getCsv(queries, '', 0, function(csvstring){ 
     console.log(csvstring); //the complete string 
    }); 
+0

事實上,這是一個可行的解決方案!感謝您讓我理解回調的概念,遞歸是一個非常好的主意! – Magali 2015-02-09 09:35:29

相關問題