Необходимо реализовать функцию run, которая принимает массив асинхронных функций fns и возвращает промис с массивом результатов этих функций.
При этом есть дополнительное требование, что нельзя, чтобы работало более limit функций одновременно. Для этого мы будем запускать функции партиями по limit штук за один раз.
Можно считать, что limit точно положительное целое число, а функции из fns возвращают промисы, которые никогда не реджектятся.
const fn1 = () => new Promise(r => setTimeout(r, 3400, "a")); const fn2 = () => new Promise(r => setTimeout(r, 600, "b")); const fn3 = () => new Promise(r => setTimeout(r, 2000, "c")); const fn4 = () => new Promise(r => setTimeout(r, 1400, "d")); const fn5 = () => new Promise(r => setTimeout(r, 1800, "e")); const fn6 = () => new Promise(r => setTimeout(r, 400, "f")); run([fn1, fn2, fn3, fn4, fn5, fn6], 2).then(arr => { console.log(arr); // arr === ["a", "b", "c", "d", "e", "f"] });
Если limit равен 2, то получается такая диаграмма:
fn1 ----------------- fn2 --- fn3 ---------- fn4 ------- fn5 -------- fn6 --
Если limit равен 4, то получается такая диаграмма:
fn1 ----------------- fn2 --- fn3 ---------- fn4 ------- fn5 -------- fn6 --
Задачу можно решить двумя способами: через then и с помощью async/await.