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.
});