标签: fluture

使用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
查看次数

在 Sanctuary 管道中间执行 Fluture 任务

我有一个这样的管道:

S.pipe([
    getRequestFile,                  // not async
    S.chain(saveTemporary),          // not async
    S.chain(copyImageToPublicPath),  // async
    S.chain(copyFileToPath),         // async
    S.chain(someLoggingFunction),    // not async
    S.chain(sendResponse),           // not async
]);
Run Code Online (Sandbox Code Playgroud)

在这个管道中间有 2 个异步函数。我要awaitforcopyImageToPublicPath然后awaitforcopyFileToPath然后继续正常流程

经过一番搜索,我发现有Future.tryP功能可以做,async但是我如何Fluture在这个管道中间使用?

javascript functional-programming sanctuary fluture

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

使用 Sancuary 执行 Fluture 任务

我有一个这样的管子

const asyncFn = (x) => {
    return Future.tryP(() => Promise.resolve(x + ' str2'))
};

const pipeResult = S.pipe([
    x => S.Right(x + " str1"), // some validation function
    S.map(asyncFn),
])("X");

pipeResult.fork(console.error, console.log);
Run Code Online (Sandbox Code Playgroud)

我想在asyncFn. 问题是当我有Right输入时,我可以再分叉它。

当我登录时,pipeResult我看到:

Right (tryP(() => Promise.resolve(x + ' str2')))
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

javascript functional-programming sanctuary fluture

0
推荐指数
1
解决办法
187
查看次数