【发布时间】:2018-03-08 09:17:18
【问题描述】:
如何在 Future 的上下文中将我的第一个条件替换为 require 函数?我是否应该将整个 inRange 方法包装在 Future 中,如果这样做,我该如何处理最后一个 Future 以使其不返回 Future[Future[List[UserId]],或者有没有更好的办法?
我有一段看起来像这样的代码:
class RetrieveHomeownersDefault(depA: DependencyA, depB: DependencyB) extends RetrieveHomeowners {
def inRange(range: GpsRange): Future[List[UserId]] = {
// I would like to replace this conditional with `require(count >= 0, "The offset…`
if (count < 0) {
Future.failed(new IllegalArgumentException("The offset must be a positive integer.")
} else {
val retrieveUsers: Future[List[UserId]] = depA.inRange(range)
for (
userIds <- retrieveUsers
homes <- depB.homesForUsers(userIds)
) yield FilterUsers.withoutHomes(userIds, homes)
}
}
}
我开始在代码的其他区域使用 require 函数,但是当我尝试在 Futures 上下文中使用它时遇到了一些问题。
class RetrieveHomeownersDefault(depA: DependencyA, depB: DependencyB) extends RetrieveHomeowners {
// Wrapped the entire method with Future, but is that the correct approach?
def inRange(range: GpsRange): Future[List[UserId]] = Future {
require(count >= 0, "The offset must be a positive integer.")
val retrieveUsers: Future[List[UserId]] = depA.inRange(range)
// Now I get Future[Future[List[UserId]]] error in the compiler.
for (
userIds <- retrieveUsers
homes <- depB.homesForUsers(userIds)
) yield FilterUsers.withoutHomes(userIds, homes)
}
}
我们将不胜感激任何提示、反馈或建议。我刚刚开始使用 Futures,仍然很难理解许多概念。
非常感谢!
【问题讨论】: