我正在使用Promise.map处理数组。对于每个元素,我正在执行一个异步操作,该操作返回一个Promise。但是,我想在每次调用之间引入一些延迟,因为下游对请求数量有限制。这是我想做的
return Promise.map(array, function (elem){
// perform an async call using elem
// wait for 500 ms
})
Run Code Online (Sandbox Code Playgroud)
我怎样才能达到同样的目的?
因为下游对请求数量有限制
此类问题的解决方案是限制同时发出的请求的数量。使用延迟只是对如何控制它的猜测,但一点也不精确。相反,您应该严格限制同时处理的请求数量。
我怎样才能达到同样的效果?
Promise.map()幸运的是,Bluebird 有一个并发选项,可以通过设置选项来控制同时处理的请求数量concurrency。假设您发现同时处理两个请求是安全的。然后,你可以这样做:
return Promise.map(array, function (elem){
// perform an async call, return a promise from that async call
}, {concurrency: 2});
Run Code Online (Sandbox Code Playgroud)
这将管理数组的迭代,以便同时进行的异步操作不超过 2 个。显然,您可以设置concurrency为您认为合适的任何值。
该方法是with已设置为 1Promise.mapSeries()的一种特殊情况。因此,如果您确实希望调用是连续的(在任何给定时间只有一个正在进行中),那么您可以直接使用该方法。Promise.map()concurrencyPromise.mapSeries()
| 归档时间: |
|
| 查看次数: |
3833 次 |
| 最近记录: |