'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(...) 已创建但未返回。所以基本上它什么也没做。