我正在使用google-spreadsheet模块阅读多个Google文档。这涉及循环我保存在json文件中的每个模块的所有凭据,然后拉动电子表格。因此,如果我的json文件中有10个电子表格凭据,我将需要在循环内调用具有这些详细信息的函数10次。
然后我将保存这些电子表格中的信息。我需要异步执行此操作。我怎样才能实现这一点,也许使用异步模块?我试图了解这个模块的队列方面,但对它没有多大意义。
for (var i = 0; i < sheets.length; i++) {
// All of the below could be put in a separate function that needs to be run asynchronously
var sheetID=sheets[i]
// spreadsheet key is the long id in the sheets URL
var doc = new GoogleSpreadsheet(sheetID);
doc.useServiceAccountAuth(creds, function(err) {
if (err) {
console.log(err);
return
}
doc.getInfo(function(err, info) {
if (err) {
return console.log(err);
}
sheet = info.worksheets[0];
sheet.getRows({
orderby: "marketname",
start: 0
}, function(err, row_data) {
for (var i = 0; i < row_data.length; i++) {
console.log(row_data[i].marketname);
}
})
})
})
}
答案 0 :(得分:0)
因此,如果我正确理解你想要做的是异步for循环。这意味着你需要一个异步处理(这里是评论中的所有内容),你需要一个接一个地链接在一起。
不使用async lib,您可以像在此示例中那样执行
// Async task
function async(arg, callback) {
//You put in here what needs to be done with each of your data
}
// Final task: display or save your data in your files
function final() { console.log('Done', results); }
// A simple async series:
var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];
//Recursive function that will go through your items.
function series(item) {
//if there is still some item to work with
if(item) {
//call your async function with our current item
async( item, function(result) {
//push in the results
results.push(result);
//Go to the next item.
return series(items.shift());
});
} else {
//Otherwise this means we're done, and results[] is populated!
return final();
}
}
//Start the treatment
series(items.shift());
希望这有帮助!
您可以在this great paper中找到有关某些控制流的更多信息。