NodeJS:URL请求之间等待5秒不起作用

时间:2014-09-15 15:05:33

标签: node.js request settimeout

我正在尝试抓取我网站上的网址列表。我想在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));
}

1 个答案:

答案 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);