我正在尝试抓取我网站上的网址列表。我想在URL请求之间等待五秒钟,但问题是无论我如何将我的setTImeout函数埋入脚本中,它都不会按照我想要的方式等待。
var urlArray=["http://domain.com/page1.php", "http://domain.com/page2.php", ... ];
var request = require('request');
function logStatus(url){
request(url, function (err, res, body){
console.log(res.statusCode);
});
return 1;
}
function doSetTimeout(getURL){
timer = setTimeout(logStatus(getURL), 5000);
clearTimeout(timer);
}
urlArray.forEach(function(entry) {
doSetTimeout(entry);
//setTimeout(logStatus(entry), 5000)
});
工作编辑:
var request = require('request');
function logStatus(url){
return 1;
}
var waitInSeconds=5;
var waitInMilliSeconds=waitInSeconds*1000;
console.log('This scan will take '+((urlArray.length * waitInSeconds)/60)+' minutes');
for(i=0; i<=1000;i++){
if(!urlArray[i]) { //if url number i is not in array
break;
};
(function(i){
setTimeout(function(){
request(urlArray[i], function (err, res, body){
console.log(res.statusCode);
if(i/10 % 1 === 0 ){ //if we have completed 10 more requests, let the user no how much time is remaining.
console.log(((urlArray.length * waitInSeconds)/60)+' minutes remaining.');
}
});
}, waitInMilliSeconds * i);
}(i));
}
答案 0 :(得分:0)
试试这个:
var urlArray=["http://domain.com/page1.php", "http://domain.com/page2.php", ... ];
var request = require('request');
function processUrls(urls) {
var url = urls.shift();
logStatus(url, function() {
if(urls.length > 0) {
setTimeout(processUrls.bind(this, urls));
}
});
}
function logStatus(url, done){
request(url, function (err, res, body){
console.log(res.statusCode);
done();
});
}
processUrls(urlArray);