Функция compose принимает массив асинхронных функций и возвращает асинхронную функцию. Эта функция принимает один аргумент и последовательно справа налево выполняет асинхронные функции.
square возводит в квадрат за 2000 мсdivideBy5 делит на 5 за 1500 мсmultiplyBy3 умножает на 3 за 500 мсconst foo = compose([square, divideBy5, multiplyBy3]); foo(10).then(x => { console.log(x); // 36 });
Функция foo (результат вызова compose):
Эту задачу можно решить как минимум 4 способами:
for,async/await,reduce (reduceRight).const square = x => new Promise(r => setTimeout(r, 2000, x ** 2)); const divideBy5 = x => new Promise(r => setTimeout(r, 1500, x / 5)); const multiplyBy3 = x => new Promise(r => setTimeout(r, 500, x * 3)); const foo = compose([square, divideBy5, multiplyBy3]); console.time("xxx"); foo(10).then(value => { console.log(value); console.timeEnd("xxx"); });