速率限制GET请求

Ron*_*Ron 3 mongodb node.js

我有一个外部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
            }
            )
        };
    }
});
Run Code Online (Sandbox Code Playgroud)

Avn*_*rSo 5

这可以使用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);
Run Code Online (Sandbox Code Playgroud)

而且由于request-rate-limiter是基于request只需更换requestlimiter.request

您可以在包的npm页面找到更多信息 - https://www.npmjs.com/package/request-rate-limiter

就个人而言 - 我会用承诺取代所有这些回调