- Напишите функцию
pipe
, композирующую передаваемые в нее аргументы слева направо.const pipe = (...fns) => x => ...
А если хоть один из аргументов окажется не функционального типа, тоpipe
должен выбросить ошибку. Например, если у нас есть три функции:
const inc = x => ++x;
const twice = x => x * 2;
const cube = x => x ** 3;
И нам нужно скомпозировать их так const f = pipe(inc, twice, cube);
то при вызове const x = f(5);
нужно ожидать, что x
примет значение 1728
.
А если мы скомпозируем const f = pipe(inc, inc);
то при вызове
const x = f(7);
значение x
будет 9
. Но если мы передадим не функцию в
pipe
, например: const f = pipe(inc, 7, cube);
то, не дожидаясь вызова f
,
сразу получим ошибку.
- Реализуйте композицию функций справа налево (без использования рекурсии),
которая будет подавлять ошибки, если композируемые функции будут их бросать,
то, исполнение функции завершается с
undefined
, а на ошибки можно будет подписаться черезf.on('error', e => { ... });
.