2636. Promise Pool

Leetcode link

题目简介

/**
 * @param {Function[]} functions
 * @param {number} n
 * @return {Promise}
 */

题目要求我们用 promise 实现一个并发控制池 promisePool

functions 表示待执行的异步函数

n 代表最大并发数量

promisePool 只有当所有的 functions 都执行完毕之后才能 resolve

解题思路

控制并发数量的题目,一般会需要 worker 来辅助

每一个 worker 控制一个并发任务,题目要求我们最多使用 n 个并发,所以我们可以用 n 个 worker 来实现

对于每个 worker 来说,有两个任务:

  1. 判断当前是否有未执行任务
  2. 如果有,则选取其中一个未执行任务执行,直到当前任务结束

Javascript

/**
 * @param {Function[]} functions
 * @param {number} n
 * @return {Promise}
 */
var promisePool = async function (functions, n) {
  let idx = 0
  const len = functions.length

  const worker = async () => {
    while (idx < len) {
      await functions[idx++]()
    }
  }

  const promises = new Array(n).fill(null).map(_ => worker())
  await Promise.all(promises)
};

results matching ""

    No results matching ""