promise.all并发控制
时间: 2023-10-21 15:29:47 浏览: 47
Promise.all是一个用于并行执行多个异步任务的方法,在所有任务都完成后返回一个包含所有任务结果的数组。但是,当使用Promise.all时,所有的请求会同时发出,没有并发控制。为了实现并发控制,可以使用Promise.race配合async await来控制并发数量。
具体的实现方法如下:
1. 创建一个空数组ret,用于存放所有的promise实例。
2. 创建一个空数组executing,用于存放目前正在执行的promise。
3. 遍历待执行的任务数组,对于每个任务,创建一个promise实例p,并将其添加到ret数组中。
4. 如果并发数限制小于等于任务数组的长度,则进行并发控制。
5. 在then回调中,当这个promise状态变为fulfilled后,将其从正在执行的promise列表executing中删除。
6. 将当前promise实例e添加到executing数组中,并检查executing数组的长度是否超过并发数限制。
7. 如果超过限制,使用Promise.race等待某一个promise状态发生变更。
8. 状态变更后,执行上面的then回调,将该promise从executing中删除,然后再进入下一次循环,生成新的promise进行补充。
9. 返回Promise.all(ret)以等待所有任务的完成,并获取结果数组。
这样,通过Promise.race配合async await,就可以实现对Promise.all的并发控制。
<span class="em">1</span><span class="em">2</span><span class="em">3</span>
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)