Сообщение об ошибке "Возможно" от Ramda Pass через цепные вызовы
Допустим, у меня есть набор функций, возвращающих значения Just или Nothing, и я хочу связать их вместе следующим образом;
var a = M.Just("5").map(function(data){
return 1;
}).chain(function(data){
/*Make some operation return Just or Nothing */
console.log(data);
return M.Just(2);
}).chain(function(data){
/*Make some operation return Just or Nothing */
console.log(data);
return M.Nothing("Reason 1");
}).chain(function(data){
/*Make some operation return Just or Nothing */
console.log(data);
return M.Nothing("Reason 2");
}).getOrElse(function(data){
console.log(data);
return "Message";
});
console.log(a());
Выход:
> 1
> 2
> undefined
> Message
В приведенном выше коде, поскольку он завершается с ошибкой на этапе, когда функция возвращает M.Nothing("Причина 1"), он не проходит через другие функции, что я и ожидал. Я считаю, что не существует допустимого конструктора для Nothing, которое принимает параметры. Есть ли способ получить это сообщение об ошибке в конце выполнения? Я пробовал это в народной сказке, это связано со спецификой фэнтезийных земель?
Спасибо
1 ответ
Вы можете использовать любую монаду для этой цели, как указано в документации.
Тип Either очень похож на тип Maybe, поскольку его часто используют для представления понятия сбоя.
Я изменил пример, который вы дали с любой из монад ниже.
var R = require('ramda');
var M = require('ramda-fantasy').Either;
var a = M.Right("5").map(function(data){
return 1;
}).chain(function(data){
/*Make some operation return Just or Nothing */
console.log(data);
return M.Right(2);
}).chain(function(data){
/*Make some operation return Just or Nothing */
console.log(data);
return M.Left("Reason 1");
}).chain(function(data){
/*Make some operation return Just or Nothing */
console.log(data);
return M.Left("Reason 2");
});
console.log(a);
console.log(a.isLeft);