跳到主要内容

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);
});
}