javascript - Node.js - 使用每秒 5 个请求的 API 限制

标签 javascript node.js promise request-promise

我有一个“脚本”可以对特定 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/

相关文章:

javascript - 如何在使用 JavaScript 刷新页面时更改图像?

javascript - 寻找一种方法来简化带有多个 || 的 if 语句

javascript - 如何仅在单击时折叠导航栏菜单,而不是打开,无法弄清楚这个

javascript - js 区分正则表达式捕获组

javascript - Catch() 不处理 404

javascript - 在构造中

javascript - 使用 JAVA-SCRIPT 解析 JSON 文件

node.js - 错误! Windows_NT 6.3.9600,windows8无法安装cordova

javascript - 未处理的 promise 拒绝在哪里?我怎样才能避免它?

javascript - 如何获取数组中最大的数字和对应的名称?