我有一个“脚本”可以对特定 API 发出数千个请求。这个 API 每秒只允许 5 个请求(并且它的测量方式可能与我不同)。为了发出请求,我使用了 request-promise
框架,并且我已经用这个取代了普通的 request-promise
函数:
const request_promise = require('request-promise')
function waitRetryPromise() {
var count = 0 // keeps count of requests
function rp(options) {
const timedCall = (resolve) => setTimeout( ()=>resolve(rp(options)),1000) // recursive call
count += 1
if (count % 3 == 0) { // recalls after a second on every third request
return new Promise(timedCall)
} else {
return request_promise(options)
}
}
return rp
}
const rp = waitRetryPromise()
一旦连续发出大约 300 个请求(给予或接受),这些请求就会开始相互干扰。有没有人有更好的解决方案?我认为对同一个函数的递归调用会有所帮助,它确实有帮助,但并没有解决问题。也许有一种模式可以对请求进行排队,一次处理几个请求?也许是图书馆?
谢谢!
最佳答案
好的,而不是递归调用 rp 等,只需确保在请求之间延迟适当的时间...每秒 5 次,即 200 毫秒
function waitRetryPromise() {
let promise = Promise.resolve();
return function rp(options) {
return promise = promise
.then(() => new Promise(resolve => setTimeout(resolve, 200)))
.then(() => request_promise(options));
}
}
const rp = waitRetryPromise();
关于javascript - Node.js - 使用每秒 5 个请求的 API 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701209/