【发布时间】:2014-10-14 09:44:40
【问题描述】:
我正在使用 ReactiveMongo 驱动程序编写一个 Scala 应用程序。访问数据库的方法总是返回Future[T]。以下代码段是否等效?
(与onComplete)
val results: Future[List[Tag]] = Tags.all.toList
results onComplete {
case Success(list) => //do something with list
case Failure(t) => //throw the error
}
(与flatMap)
Tags.all.toList.flatMap(list => //do something with list)
有什么区别?
flatMap 不会抛出Failure??而flatMap 是类似onComplete 的回调,还是等到Tags.all.toList 语句未完成?
【问题讨论】:
-
从签名中可以明显看出:同样尝试 monad,
flatMap不关心失败。这就是 monad 的意义所在:您完整地传递任何错误并仅在管道中没有错误时应用您的操作。只有在最后你才被建议同时抓住错误和成功
标签: scala asynchronous future reactive-programming