我正在编写一个遵循以下工作流程的scala函数:
使用id从mongo数据库中获取对象。我在这里使用反应性mongo。
获取对象后再向数据库发出查询以获取项目列表并将其返回。
我已按以下方式实施此工作流程:
def functionA(id:String):Future[List[Hotel]]={
var futureHotel = hotelRepository.getHotel(id) // returns Futue[Option[Hotel]]
val result = for {
r<-futureHotel
}yield (hotelRepository.getHotels(r.get.giataid)) // this is supposed to be Future[List[Hotel]]
}
它给出了如下错误消息:Type mismatch. Found Unit require Future[List[Hotel]]
因为我是Scala的新手,我相信我错过了一些东西。如果有人可以指出,那将会很酷。任何线索或帮助将不胜感激。
答案 0 :(得分:3)
您要将结果分配给result
。 scala中的赋值类型为Unit
(不返回任何内容)。删除赋值,因为最后一个表达式成为返回值。
此外,如果getHotels
方法返回Future[List[...]]
,您最终会以Future[Future[List[...]]
结束。你可能想要这样的东西:
def functionA(id:String):Future[List[Hotel]]= {
for {
r <- hotelRepository.getHotel(id)
result <- hotelRepository.getHotels(r.get.giataid)
} yield result
}
这转化为对flatMap
的调用,而这种调用不会产生双重嵌套的未来。