标签: ramda-fantasy

使用Fluture与Ramda

我正在使用Bluebird做异步操作,但现在必须做很多空/空/错误检查,我不想按照通常的Else路线.我正在考虑使用monad,但尚未彻底完成它.

此外,我希望它能与ramda一起使用,pipe / compose因为我的大多数其他代码都整齐地封装在功能管道中.根据许多 讨论,monadic Futures(Fluture似乎被推荐)比Promises更受欢迎,对pipeP的支持和composeP可能在未来版本中被删除.

Fluture似乎是一个不错的选择,因为据说它可以很好地适应那些坚持幻想 - 土地规格的图书馆(如ramda).

但是我完全迷失了如何实现将Ramda的管道与Fluture集成在一起的东西.我需要一些示例代码的帮助.

例如:

我有一个DB调用,返回一个对象数组.数组可能具有值,为空或未定义.我有一个功能管道,可以转换数据并将其返回到前端.

示例承诺代码:

fancyDBCall1(constraints)
  .then(data => {
    if (!data || data.length === 0) {
      return []
    }
    return pipe(
    ...
    transformation functions
    ...
    )(data)
  })
  .then(res.ok)
  .catch(res.serverError) 
Run Code Online (Sandbox Code Playgroud)

有人可以就一个好的方法提出一些指示.

javascript monads ramda.js ramda-fantasy fluture

6
推荐指数
1
解决办法
1253
查看次数

Monadic IO与ramda和ramda-fantasy

试图弄清楚IO monad是如何工作的.

使用下面的代码,我阅读filenames.txt并使用结果重命名目录中的文件testfiles.这显然是未完成的,所以不是实际重命名我记录到控制台的任何东西.:)

我的问题是:

  1. 我打了runIO两次电话,但感觉它应该只调用一次,最后呢?
  2. 我想用renameIOrenaneDirect不是找不到合适的语法.

任何其他建议也很感激,我是FP的新手!

    var R = require('ramda');
    var IO = require('ramda-fantasy').IO
    var fs = require('fs');

    const safeReadDirSync = dir => IO(() => fs.readdirSync(dir));
    const safeReadFileSync = file => IO(() => fs.readFileSync(file, 'utf-8'));

    const renameIO = (file, name) => IO(() => console.log('Renaming file ' + file + ' to ' + name + '\n'));
    const renameDirect = (file, name) => console.log('Renaming file ' + file + ' …
Run Code Online (Sandbox Code Playgroud)

functional-programming node.js ramda.js ramda-fantasy

5
推荐指数
1
解决办法
1023
查看次数

Ramda 与 FP 类型

最近我决定从 lodash 切换到 ramda,以使用功能方式来编写我的逻辑。我喜欢它!在对 FP 进行了一些广泛的挖掘之后,我发现它不仅与方便的纯/无点实用程序 (ramda) 有关,而且更多地与复杂的(至少对我而言)数学抽象(fantasy-land)有关。我没有全部了解,但Either 和Task 模式看起来非常方便。问题是我不确定如何将它与 ramda 实用程序合并。我知道 ramda-fantasy,但它不再维护。Ramda-fantasy 建议的库与 ramda-fantasy 的工作方式不同。有了关于 Monads/Monoids/Functors 类型的所有这些新信息,我完全迷失了。

例如,这个约定是什么?

Right('boo')
  .map(x => x + '!')
  .map(x => x.toUpperCase())

vs 

R.pipe(
  R.map(x => x + '!')
  R.map(x => x.toUpperCase())
)(Right('boo'))
Run Code Online (Sandbox Code Playgroud)

如果我决定一直切换到 Monads,我是否不需要 ramda?

javascript functional-programming ramda.js fantasyland ramda-fantasy

5
推荐指数
1
解决办法
76
查看次数

Ramda通过链调用传递"可能"错误消息

假设我有一堆函数返回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());
Run Code Online (Sandbox Code Playgroud)

输出:

>     1
>     2
>     undefined
>     Message
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,因为它在函数返回M.Nothing("Reason 1")的步骤失败,所以它没有通过我预期的其他函数.我相信Nothing没有有效的构造函数来获取参数.有没有办法在执行结束时获取此失败消息?我在民间故事中也试过这个,它与梦幻土地规格有关吗?

谢谢

javascript functional-programming ramda.js fantasyland ramda-fantasy

2
推荐指数
1
解决办法
242
查看次数