Javascript 拉姆达山口;也许吧;通过链调用发送的错误消息

Javascript 拉姆达山口;也许吧;通过链调用发送的错误消息,javascript,functional-programming,ramda.js,fantasyland,ramda-fantasy,Javascript,Functional Programming,Ramda.js,Fantasyland,Ramda Fantasy,假设我有一堆函数只返回值或不返回值,我想像这样将它们链接在一起 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

假设我有一堆函数只返回值或不返回值,我想像这样将它们链接在一起

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”)的步骤失败,所以它没有通过其他函数,这是我所期望的。我相信没有一个有效的构造函数可以不使用参数。是否有办法在执行结束时获取此失败消息?我也在民间故事中尝试过这个,它和幻想的土地规范有关吗


谢谢

您可以按照文档中的说明使用monad或monad

这两种类型都非常类似于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);

请注意,
可能
任一
都包含短路。但是,虽然后者可以提供错误消息,但前者不能。如果您想收集多个错误,请查看类似
验证
类型的内容。