我有一个外部 API,可将 API 请求速率限制为每秒最多 25 个请求。我想将部分结果插入 MongoDB 数据库。
我如何限制请求函数的速率,这样我就不会错过所有数组的任何 API 结果?
MongoClient.connect('mongodb://127.0.0.1:27017/test', function (err, db) {
if (err) {
throw err;
} else {
for (var i = 0; i < arr.length; i++) {
//need to rate limit the following function, without missing any value in the arr array
request( {
method: 'GET',
url: 'https://SOME_API/json?address='+arr[i]
},
function (error, response, body) {
//doing computation, including inserting to mongo
}
)
};
}
});
最佳答案
这可以使用 request-rate-limiter
包来完成。所以你可以将它添加到你的代码中:
var RateLimiter = require('request-rate-limiter');
const REQS_PER_MIN = 25 * 60; // that's 25 per second
var limiter = new RateLimiter(REQS_PER_MIN);
并且因为 request-rate-limiter
是基于 request
的,你可以用 limiter.request
替换 request
>
您可以在软件包的 npm 页面上找到更多信息 - https://www.npmjs.com/package/request-rate-limiter
就个人而言 - 我会用 promises 替换所有这些回调
关于node.js - 速率限制 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783542/