Answer
t.me/js_testОтвет:
const handler = (arr, finalStr = "") => !arr.length ? finalStr.trim() : ([curr, ...rest] = arr) && curr().then((r) => handler(rest, `${finalStr} ${r}`));
Обьяснение:
Функция handler
принимает два параметра - массив с функциями(arr
) и результирующую строку(finalStr
). Если arr
пуст - форматируем и возвращаем finalStr
. В другом случае разделяем arr
на текущую(curr
) и остальные функции(...rest
), вызываем curr
, в .then
рекурсивно вызываем handler
, передавая в него rest.
Код для проверки:
const functionsArr = [ () => new Promise((res) => setTimeout(res("JavaScript"), 500)), () => new Promise((res) => setTimeout(res("is the best"), 250)), () => new Promise((res) => setTimeout(res("programming language."), 150)), ]; const handler = (arr, finalStr = "") => !arr.length ? finalStr.trim() : ([curr, ...rest] = arr) && curr().then((r) => handler(rest, `${finalStr} ${r}`)); handler(functionsArr).then((res) => { console.log(res); // JavaScript is the best programming language. });