【问题标题】:how to get a thing done after a loop containing asynchronous function如何在包含异步函数的循环之后完成某件事
【发布时间】:2015-02-06 17:10:29
【问题描述】:

我是 javascript 的新手,我还没有找到问题的答案。

实际上我使用for循环来获取几个csv文件的内容,并将每个内容添加到全局csvstring中,以便在最后下载整个csv文件。但是每个 csv 的内容是用异步的 d3.csv 获得的,所以如果我在 d3.csv 中更新我的总 csvstring,我不能用它来保存总 csv,因为 csvstring 还没有更新。我该怎么做?

我的代码不起作用,如下:

//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

我希望我说清楚了,我提前感谢您的回答!

弹匣

【问题讨论】:

标签: javascript loops csv asynchronous d3.js


【解决方案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
    });

【讨论】:

  • 确实这是一个可行的解决方案!谢谢你让我理解了回调的概念,递归是个好主意!
猜你喜欢
  • 2014-12-14
  • 2014-05-12
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2020-07-14
相关资源
最近更新 更多