Функция 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
):
Эту задачу можно решить как минимум 3 способами:
for
async/await
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"); });