Необходимо реализовать функцию 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.