[英]Nodejs for loop callback issues
我编写了此函数,该函数应先运行此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();
}
}
};
您需要将回调函数移到请求回调中:
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();
});
}
首先,您的代码示例缺少一些方括号。 request
可能是异步库。 因此,在函数调用处,它正在事件循环中注册并立即返回。 这意味着您实际上可能立即调用了回调,而可能没有完成请求。 因此,使用异步功能进行同步循环将不起作用。
使用Promises,Continuation Passing之类的东西,或注册一个变量,该变量可跟踪是否已返回所有呼叫。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.