首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluture:应该如何使用Monads解决null处理问题

Fluture:应该如何使用Monads解决null处理问题
EN

Stack Overflow用户
提问于 2021-03-06 01:31:31
回答 1查看 57关注 0票数 1

我是函数式编程的新手,我发现下面的fluture函数式编程示例似乎为处理数据库查询和后续数据操作提供了一个非常好的示例。然而,需要注意的是,在阅读函数式编程概念时,Just/Nothing monad似乎是处理null检查的建议方法。1)这将如何适应这个示例;2)如果findOne拒绝,它是否会停止后续链的运行并立即转到分叉?

代码语言:javascript
复制
import Future from 'fluture';

const processAll = Future.fork(_sendError, _sendResponse);

const _fetchFromDB =
    encaseP(userId => myModel.findOne({ id: userId }).exec())
  //Future.fromPromise(userId => myModel.findOne({ id: userId }).exec())

processAll(_fetchFromDB(userId)
  .chain(getDataGeneric)
  .chain(_findDevice)
  .chain(_processRequest))

我从下面的stackoverflow链接中获得了这个示例,并将fromPromise修改为encaseP:

How to make Either Monads be aware of of Async functions(Promises/Future)

我假设在将Promise转换为Future的示例中,encaseP将取代fromPromise。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-06 07:27:37

实际上,可能(Nothing | Just)通常不是您想要的错误处理方式,因为尽管它可以帮助您缩短后续操作并为您提供一个提供默认值的钩子,但它不会告诉您计算无法完成的原因。

(Left | Right)为您提供了相同的功能,但也允许您访问导致流程采用错误分支的上下文,因为Left也保存数据,例如错误消息,这对于从错误中恢复、记录日志或向用户显示有用的消息非常有用。

Fluture也为您提供了异步。因为它是异步的,所以您不能直接检索值(就像您在Promises中习惯的那样),但除此之外,它的行为与可能/两者中的任一个相同:fork相当于fold。你会得到短路和更多的东西(比如改变轨迹,映射到reject分支上,等等)。

这里有一个很好的介绍https://dev.to/avaq/fluture-a-functional-alternative-to-promises-21b

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66497031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档