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