Promise.all的并发控制

前几天睿联的面试官问了这样一个问题:如何控制Promise.all的并发量,当时回答的不好,于是经过一段时间的探索,解决了该问题

        首先我们要知道promise.all()的用法一般是是传入一个promise的数组,但是由于Promise的内部是同步代码,在Promise生成后其里面的异步请求就已发送,Promise.all()只是对其结果的一个收集,那么我们要想进行并发控制就必须在生成Promise的阶段进行并发控制下面是代码



  
    
    
    
    Promise.all()
  
  
  

运行结果:

开始生成1的异步请求          ····

开始生成2的异步请求          ····

开始生成3的异步请求          ····

2

2的异步请求执行完毕            √

开始生成4的异步请求          ····

1

1的异步请求执行完毕            √

开始生成5的异步请求          ····

3

3的异步请求执行完毕            √

开始生成6的异步请求          ····

4

4的异步请求执行完毕            √

开始生成7的异步请求          ····

5

5的异步请求执行完毕            √

开始生成8的异步请求          ····

6

6的异步请求执行完毕            √

开始生成9的异步请求          ····

7

7的异步请求执行完毕            √

开始生成10的异步请求          ····

8

8的异步请求执行完毕            √

开始生成11的异步请求          ····

10

10的异步请求执行完毕            √

开始生成12的异步请求          ····

9

9的异步请求执行完毕            √

开始生成13的异步请求          ····

11

11的异步请求执行完毕            √

开始生成14的异步请求          ····

12

12的异步请求执行完毕            √

开始生成15的异步请求          ····

15

15的异步请求执行完毕            √

开始生成16的异步请求          ····

13

13的异步请求执行完毕            √

开始生成17的异步请求          ····

14

14的异步请求执行完毕            √

开始生成18的异步请求          ····

17

17的异步请求执行完毕            √

开始生成19的异步请求          ····

16

16的异步请求执行完毕            √

开始生成20的异步请求          ····

18

18的异步请求执行完毕            √

开始生成1的异步请求          ····

19

19的异步请求执行完毕            √

开始生成2的异步请求          ····

20

20的异步请求执行完毕            √

开始生成3的异步请求          ····

1

1的异步请求执行完毕            √

开始生成4的异步请求          ····

4

4的异步请求执行完毕            √

开始生成5的异步请求          ····

3

3的异步请求执行完毕            √

开始生成6的异步请求          ····

2

2的异步请求执行完毕            √

开始生成7的异步请求          ····

6

6的异步请求执行完毕            √

开始生成8的异步请求          ····

5

5的异步请求执行完毕            √

开始生成9的异步请求          ····

8

8的异步请求执行完毕            √

开始生成10的异步请求          ····

7

7的异步请求执行完毕            √

开始生成11的异步请求          ····

9

9的异步请求执行完毕            √

开始生成12的异步请求          ····

12

12的异步请求执行完毕            √

开始生成13的异步请求          ····

10

10的异步请求执行完毕            √

开始生成14的异步请求          ····

11

11的异步请求执行完毕            √

开始生成15的异步请求          ····

13

13的异步请求执行完毕            √

开始生成16的异步请求          ····

15

15的异步请求执行完毕            √

开始生成17的异步请求          ····

16

16的异步请求执行完毕            √

开始生成18的异步请求          ····

18

18的异步请求执行完毕            √

开始生成19的异步请求          ····

14

14的异步请求执行完毕            √

开始生成20的异步请求          ····

17

17的异步请求执行完毕            √

开始生成1的异步请求          ····

19

19的异步请求执行完毕            √

开始生成2的异步请求          ····

1

1的异步请求执行完毕            √

20

20的异步请求执行完毕            √

2

2的异步请求执行完毕            √

你可能感兴趣的:(javascript,前端,开发语言)