Scala 如何获取第一个成功完成的未来? 问题
我想在futures的帮助下进行两次平行执行。一个查询缓存,另一个查询数据库。调用者应返回第一个成功的已完成的未来或数据库未来Scala 如何获取第一个成功完成的未来? 问题,scala,promise,future,Scala,Promise,Future,我想在futures的帮助下进行两次平行执行。一个查询缓存,另一个查询数据库。调用者应返回第一个成功的已完成的未来或数据库未来 导入scala.concurrent.{ExecutionContext,Future} 类UserServiceImpl( 专用val cacheRepository:cacheRepository, 专用val数据库存储库:数据库存储库 )(隐式val executionContext:executionContext)扩展用户服务{ 覆盖def getUserB
导入scala.concurrent.{ExecutionContext,Future}
类UserServiceImpl(
专用val cacheRepository:cacheRepository,
专用val数据库存储库:数据库存储库
)(隐式val executionContext:executionContext)扩展用户服务{
覆盖def getUserByName(用户名:字符串):未来[用户]={
val cacheFuture:Future[用户]=Future{
cacheRepository.getUser(用户名)
}
val数据库未来:未来[用户]=未来{
databaseRepository.getUser(用户名)
}
//现在返回第一个成功完成的Future[User]或数据库Future(如果已完成)。
}
}
它看起来像是未来。find()
可能就是您想要的。根据它的返回,“结果与谓词匹配的第一个未来”,以及“…失败的未来将被忽略”。因此,您所需要的只是一个谓词,它为任何返回的用户保留true
例如,如果用户
是字符串
,那么下面的操作应该有效
Future.find(List(cacheFuture,databaseFuture))(_.nonEmpty)
请注意,如果未找到用户
,则返回一个未来[Option[User]]