我有以下代码,用于查询数据库并返回值,该值包装在EitherT类中,
val result = emailModel.getStatusByEmail(emailAddress)
result type is : ProcessorResult[List[EmaiStatusDTO]] and
type ProcessorResult[A] = ServiceResult[PermissionError, A]
type ServiceResult[Err, A] = EitherT[Future, Err, A]
我需要检查DB的退货是否为空,我该怎么做?我尝试了这个,但显然无法正常工作,我是Scala的新手,还是想弄清楚...
if (result.collectRight().onComplete().isEmpty()) {
return ProcessorResult(List(new EmaiStatusDTO(emailAddress, "Normal")))
} else {
return result
}
答案 0 :(得分:1)
据我了解,您正在使用类似EitherT from scalaz
getStatusByEmail
返回一个“ future”(延迟的计算任务),(如果您运行它)将返回一个PermissionError或一个列表-List[EmaiStatusDTO]
。
您的意图是将空列表结果更改为某个固定常数。
为此,您可以仅使用EitherT.map函数:
val result = emailModel.getStatusByEmail(emailAddress)
val defaultStatusList = List(new EmaiStatusDTO(emailAddress, "Normal")
return result.map(l => if (!l.isEmpty) l else defaultStatusList)