以下是我的代码。我用它的索引初始化每个数组元素。然后我使用async.each
迭代数组并调用以检索url内容。
请求超时设置为500毫秒。
var async = require('async');
var request = require('request');
var logger = require('log4js').getLogger();
var url = "http://www.wordpress.com";
var arr=new Array(100);
for ( var i=0; i<arr.length; i++){ arr[i]=i; }
async.each(arr, function(a, cb) {
var ts1 = (new Date()).getTime();
request(url, {timeout: 500}, function( err, res, body ) {
var ts2 = (new Date()).getTime();
logger.debug(`a=${a}, dt=${ts2-ts1}`);
if ( err ) {
logger.debug(`Error: ${err}, dt=${ts2-ts1}`);
return cb(null);
}
else {
//logger.debug(`OK: ${a}`);
cb(null);
}
});
},
function( err, result) {
});
当数组大小为100时,我得到12个超时错误:
[root@njs testreq]# node main.js | grep ETIME | wc -l
12
[root@njs testreq]#
当数组大小为1000时,我得到1000个超时错误:
[root@njs testreq]# node main.js | grep ETIME | wc -l
1000
[root@njs testreq]#
原因是什么?我怎么能避免呢?
答案 0 :(得分:0)
这里有几个问题。
我的代码中还注意到一些可以改进的东西。
如果要创建包含100个元素的数组,则不必执行
var arr = new Array(100)
for (var i = 0; i < arr.length; i < 0) { arr[i] = i }
您可以将其替换为
var arr = Array.from({length: 100}, (v, k) => k)
有关详细信息,请参阅Array.from
var timestamp = (new Date()).getTime()
可以替换为
var timestamp = Date.now()
或
var timestamp = +Date()
有关详细信息,请参阅Date.now