javascript - 如何在包含异步函数的循环之后完成某件事

标签 javascript loops csv asynchronous d3.js

我对 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

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

杂志

最佳答案

您可以进行一些递归并等到最后一个查询执行某些操作吗?

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

关于javascript - 如何在包含异步函数的循环之后完成某件事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28371079/

相关文章:

c++ - 使用嵌套的 for 循环进行向上和向下计数

python - 更改特定数据框列的数据类型 - Pandas

javascript - Ionic 使用 Bing Maps 代理失败和 Access-Control-Allow-Origin 问题

javascript - 如何编写一个 jQuery 事件来显示双击时的表单,而该表单不会对双击事件使用react?

java arrayList循环性能

Python - 使用反向计数器附加行号

java结果集只写入一行而不是全部选择到.csv中

python - 如何向从 CSV 文件创建的每个命名元组添加 ID 属性?

javascript - Lodash:_.isBlank?

javascript - Filereader 在读取为 readAsArrayBuffer 时使用正确的编码读取文件