def getRecordsFromDB(primaryKey: Long): Future[Seq[Record]] = ???
def extractAValueFromResult: Future[String] =
getRecordsFromDB("abcxyz").map(_.headOption.map(_.fieldName).recover(????)
具有上述功能—第一个函数用于查询数据库并获取记录,第二个函数用于从第一个函数返回的记录中提取特定字段。
我应该如何修改 extractAValueFromResult
所以我明白了 Future[String]
,所以当记录为空或未来失败时,我可以返回空 String
? 仅供参考,只需记录extractavaluefromresult的返回值,因此不希望在将来失败时使整个应用程序失败。
2条答案
按热度按时间hgb9j2n61#
这就是你想要的:
有几点:
_head
是“代码气味”(以同样的方式Option.get
是),因为它将在集合为空时抛出。一个“纯粹主义者”会写_.headOption.fold("")(_.fieldName)
相反。。。不过,既然你最终还是会康复的,我不太明白这有什么意义。捕捉所有异常实际上也是“代码气味”。至少应该是这样
case NonFatal(_) => ...
(我刚刚写道_
但即便如此,也很少有好主意:由于网络超时或数据库关闭而导致的故障与不存在的条目完全不同。默默地把所有的失败合并在一起,然后把它们和“找不到”的情况混为一谈只是。。。错了。如果您只是在玩东西,它会工作,但永远不要在任何生产代码中这样做。46scxncf2#
你可以这样做: