Задача

Реализуйте функцию parallel, которая выполняет массив функций параллельно и собирает их результаты в правильном порядке.

Функция должна принимать два параметра:

  • functions — массив функций, которые могут быть двух типов:
    • Асинхронные функции с коллбэком (принимают один параметр resolve);
    • Синхронные функции (без параметров, возвращают результат сразу).
  • callback — функция обратного вызова, которая получает массив всех результатов.

Особенности поведения:

  • Все функции должны выполняться параллельно (одновременно запускаться);
  • Результаты должны сохраняться в том же порядке, что и функции в исходном массиве;
  • callback вызывается только после завершения всех функций;
  • Синхронные функции выполняются мгновенно, асинхронные — в своём темпе.

Пример

parallel([
    function (resolve) {
        setTimeout(() => resolve(10), 50);
    },
    function () {
        return 5;
    },
    function (resolve) {
        setTimeout(() => resolve(0), 10);
    },
], function (results) {
    console.log(results); // [10, 5, 0]
});

Решение

См. также