如何在包含异步函数的循环后完成某件事
how to get a thing done after a loop containing asynchronous function
我是 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 的新手,我还没有找到问题的答案。
其实我是用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
});