我有一个“脚本”,可以对特定 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 个请求(给予或接受),这些请求就会开始相互干扰。有人有更好的解决方案吗?我认为对同一函数的递归调用会有所帮助,确实如此,但没有解决问题。也许有一种模式可以对请求进行排队,并一次执行几个请求?也许是图书馆?
Thanks!
好的,不要递归调用 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)