我编写了此函数,该函数应先运行此for循环,然后运行最后的回调,但在完成循环之前它将继续运行该回调。我读过的唯一解决方案是使用回调可以解决此问题,但似乎并没有太大的不同。
function run(callback){
for(var i = 0; i < urls.length; i++){
request(url, function(error, resp, body){
//uses cheerio to iterate through some elements on the page
//then saves to an object for a future response
});
callback();
}
}
最佳答案
我将添加一个名为totaltasks
的变量和另一个名为tasksfinished
的变量。然后,当请求完成时,增加tasksfinished
,并在tasksfinished
等于totaltasks
时调用回调:
function run(callback){
var totaltasks = urls.length;
var tasksfinished = 0;
// helper function
var check = function() {
if(totaltasks == tasksfinished) {
callback();
}
}
for(var i = 0; i < totaltasks; i++){
try {
request(url, function(error, resp, body) {
tasksfinished++;
check();
});
} catch(e) {
tasksfinished++;
check();
}
}
};