Сообщение об ошибке "Возможно" от 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);
Другие вопросы по тегам