'require' 应该进入 Future 内部还是外部?
Should 'require' go inside or outside of the Future?
如何在 Future 的上下文中用 require
函数替换我的第一个条件?我是否应该将整个 inRange 方法包装在 Future 中,如果这样做,我该如何处理最后一个 Future 以便它不会 return 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,但仍然很难理解许多概念。
非常感谢!
只需删除外部 Future {...}
包装纸。这不是必需的。 require
调用进入 Future
没有充分的理由。它实际上在外面更好,因为它会立即(在同一个线程中)向调用者报告参数无效。
对了,原码也是错的。 Future.failed(...)
已创建但未返回。所以基本上它什么也没做。
如何在 Future 的上下文中用 require
函数替换我的第一个条件?我是否应该将整个 inRange 方法包装在 Future 中,如果这样做,我该如何处理最后一个 Future 以便它不会 return 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,但仍然很难理解许多概念。
非常感谢!
只需删除外部 Future {...}
包装纸。这不是必需的。 require
调用进入 Future
没有充分的理由。它实际上在外面更好,因为它会立即(在同一个线程中)向调用者报告参数无效。
对了,原码也是错的。 Future.failed(...)
已创建但未返回。所以基本上它什么也没做。