如何固定每秒API请求数(延迟请求)



我使用的是一个开放的API,它具有每秒最大请求数(1秒(的配额。

因此,在提出下一个请求之前,我希望有一个浮动延迟。我可以做固定的,但这需要更多的时间来处理(因为在请求后,它会将数据保存到数据库,这需要x时间(。

我试着写这样的东西:

'use strict'
const request = require('request-promise')
var last_request_time = 0
const makeRequest = (param1, param2, callback) => {
let current_request_time = Date.now()
setTimeout(() => {
last_request_time = current_request_time // doesn't change "last_request_time"

request({
uri: encodeURI(`/url/${param1}/${param2}`),
json: true
}).then(data => {
return callback('ok', data)
}).catch(error => {
return callback('error', error)
})
}, 1000 - (current_request_time - last_request_time))
}
module.exports = makeRequest

但是,如果不在API请求之前更改last_request_time,它就无法工作。如何做到这一点?

试试这个:

var last_request_time = 0;
const makeRequest = (param1, param2, callback) => {
let current_request_time = Date.now();
setTimeout(() => {
// doesn't change "last_request_time"
request({
uri: encodeURI(`/url/${param1}/${param2}`),
json: true
}).then(data => {
return callback('ok', data);
}).catch(error => {
return callback('error', error);
});
}, 1000 - (current_request_time - last_request_time));
last_request_time = current_request_time;
};

如果你在超时功能中有它,它不会改变外侧值