Node.js 使用Promise.all()时如何控制请求频率

Node.js 使用Promise.all()时如何控制请求频率,node.js,Node.js,我需要其他站点的一些数据,所以我应该一个接一个地请求站点,我将promises数组放入并使用Promise.all(promises)快速完成 但问题是它太快了,所以站点服务器暂时阻止了我,在使用Promise.all()时如何控制请求频率 以下是我的代码: (async() => { const request = require('request-promise') let promises = [] let i = 10000 while( i < 0){

我需要其他站点的一些数据,所以我应该一个接一个地请求站点,我将
promises
数组放入并使用
Promise.all(promises)
快速完成

但问题是它太快了,所以站点服务器暂时阻止了我,在使用Promise.all()时如何控制请求频率

以下是我的代码:

(async() => {
  const request = require('request-promise')

  let promises = []
  let i = 10000
  while( i < 0){
    promises.push(new Promise(async(r) => {
      await request({
        uri: 'http://somehost_i_need_the_data/' + i
      })
      r()
    }))
    i++
  }

  await Promise.all(promises)

})()
(异步()=>{
const request=require('request-promise')
让承诺=[]
设i=10000
而(i<0){
推送(新承诺(异步(r)=>{
等待请求({
uri:'http://somehost_i_need_the_data/“+i
})
r()
}))
我++
}
等待承诺。所有(承诺)
})()

@AluanHaddad更新了Bluebird promise库中的
promise.map()
,它可以让您指定希望同时处理多少并发请求,以避免使用目标服务器过度。还有其他几个堆栈溢出答案,说明了如果需要,如何自己编写这种类型的逻辑。要以最佳方式真正解决问题,您需要弄清楚目标服务器实际限制了什么(并发请求、请求/秒等),并为此编写代码。此外,请避免使用手动创建的承诺包围承诺的承诺反模式。当
request()
已经返回承诺时,代码中没有理由使用
newpromise()