我正在尝试使用 XMLHttpRequest 模块在 for 循环中异步调用 REST API。我在 1 个循环中发出 400 个请求,每 100 个请求后等待时间为 1 秒。这在客户端 JavaScript 上运行良好。但是,当我使用相同的模块在 NodeJS 上运行时(它不是本机可用的,我必须从 npmjs 下载),我在大约 230 个请求后收到此错误。知道我是否可以使用另一个模块来更好地处理这种批量 API 请求吗?
错误:在 TCPConnectWrap.afterConnect [as oncomplete] 连接 ETIMEDOUT
我终于找到了解决我的问题的方法。
使用请求模块调用 REST API 时,需要在选项中指定池变量。这用作 maxsockets,这是并发请求处理的声明。
下面为那些遇到此问题的人发布了示例代码:
有关更多信息,请查看以下帖子: 如何使用请求 js(节点 js 模块)池
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);
}); Run Code Online (Sandbox Code Playgroud)