【发布时间】:2018-03-23 21:29:34
【问题描述】:
我有一个“脚本”,可以对特定 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 个请求(给予或接受),这些请求就会开始相互干扰。有没有人有更好的解决方案?我认为对同一函数的递归调用会有所帮助,它确实有效,但并没有解决问题。也许有一种模式来排队请求,一次做几个?也许是图书馆?
谢谢!
【问题讨论】:
-
these requests start to interfere with each other以什么方式? -
还是想知道
these requests start to interfere with each other是什么意思 -
所以,没有回答有效问题?
-
抱歉,我在睡前问了这个问题。我上面引用的意思是,只要有足够的请求,当我做出一些延迟时,一些不可避免的仍然会与一些后来的非延迟的同时开始,从而导致同样的问题。 :-)
-
所有答案似乎都应用了近似延迟以达到预期的结果。我喜欢将每次调用次数限制为 API 限制的想法,并且会继续这样做。
标签: javascript node.js promise request-promise