使用Promise.all延迟和限制一系列Promise?

时间:2017-05-16 18:54:43

标签: javascript promise es6-promise axios

我有一系列端点,我想像这样查询: const apiList = ['/api1', '/callme', '/thisonetoo']

使用axios,一个基于promise的库,我可以通过映射数组动态生成一个promise - >

Promise.all(apiList.map(name => promiseGet(name))).then(res => ...)

这样可以正常工作......但是它调用服务器的速度太快了,而且有些api被拒绝了,导致整个程序搞砸了。

在创建或调用下一个端点之前,有没有办法节流/去抖并等待500毫秒?

限制Promise的开放量似乎不够。我必须进行一些"睡眠"在调用数组中的下一个api端点之前等待一段时间。

2 个答案:

答案 0 :(得分:-2)

也许连续打电话给他们?

const apiList = ['/api1', '/callme', '/thisonetoo'];

function doNext() {
  const uri = apiList.shift();
  axios.get(uri)
    .then(doNext);
}

如果您想要额外的限制,可以在setTimeout内添加doNext

答案 1 :(得分:-2)

我建议在通话中添加concurrency参数:

Promise.all(apiList.map(name => promiseGet(name), { concurrency: 10 })).then(res => ...)

您还可以使用Promise.delay(500)在执行

之前让方法调用等待