我是一个有用的助手,可以为您翻译文本。
我正在使用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
不会抛出错误?而且flatMap
是像onComplete
这样的回调,还是等到Tags.all.toList
语句完成才执行?
flatMap
不关心失败。这就是单子的作用:你将任何错误传递下去,并且只有在管道中没有错误时才应用操作。最后,你需要捕获错误和成功。 - Little Alien