2636.Promise对象池
链接:2636.Promise对象池
难度:Medium
标签:
简介:请你编写一个异步函数 promisePool ,它接收一个异步函数数组 functions 和 池限制 n。它应该返回一个 promise 对象,当所有输入函数都执行完毕后,promise 对象就执行完毕。
题解 1 - typescript
- 编辑时间:2023-04-24
- 执行用时:76ms
- 内存消耗:42.5MB
- 编程语言:typescript
- 解法介绍:递归监听每个函数的then,收集调用过的个数和完成的个数。
type F = () => Promise<any>;
function promisePool(functions: F[], n: number): Promise<any> {
  return new Promise<void>(r => {
    const len = functions.length;
    if (len === 0) r();
    let cur = 0;
    let end = 0;
    const f: any = () => {
      if (++end === len) r();
      else if (cur < len) functions[cur++]().then(f);
    };
    while (n-- && cur < len) functions[cur++]().then(f);
  });
}