【发布时间】:2014-09-15 15:05:32
【问题描述】:
我正在尝试抓取我网站上的 URL 列表。我想在 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));
}
【问题讨论】:
-
这个构造
setTimeout(logStatus(getURL), 5000);立即调用logStatus(getURL)。它不会等待超时。您需要将函数引用传递给setTimeout(),以便稍后调用。fn()立即被调用。fn是一个函数引用,以后可以调用。
标签: node.js request settimeout