我正在尝试使用 XMLHttpRequest 模块在 for 循环中异步调用 REST API。我在 1 个循环中发出 400 个请求,每 100 个请求后等待 1 秒。这在客户端 JavaScript 上运行良好。但是,当我使用相同的模块在 NodeJS 上运行时(它不是本地可用的,我必须从 npmjs 下载),大约 230 个请求后出现此错误。知道是否有另一个模块可以用来更好地处理这种批量 API 请求吗?

Error: connect ETIMEDOUT at TCPConnectWrap.afterConnect [as oncomplete]

请您参考如下方法:

我终于找到了解决问题的方法。

使用request模块调用REST API时,需要在options中指定pool变量。这作为maxsockets,它是并发请求处理的声明。

下面为遇到此问题的人发布了示例代码:

有关更多信息,请查看以下帖子: How to use Request js (Node js Module) pools

var separateReqPool = {maxSockets: 20}; 
var request = require('request'); 
var url_array = ['url1','url2','url3'];//Array of all the urls to call 
 
 
async.map(url_array, function(item, callback){ 
      request({url: item, pool: separateReqPool}, function (error, response, body) { 
          //Do Something with the response 
          }); 
        }, function(err, results){ 
          console.log(results); 
        }); 
     }). 
     catch((err) => { 
        console.log(err); 
 }); 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!