Twitter の先物を (Finagle スタックの一部として) 使用していますが、(ビジネス) 例外を使用してアプリケーションのフローを制御するという概念は好きではありません。例外はメソッド シグネチャに表示されないからです。
そこで、代わりに Future[Either[A,B]] を使用するというアイデアがありました。
しかし、私はこの概念で先物を理解するために使用する際にいくつかの問題があります:
たとえば、次のようなリポジトリ メソッドがあります。
def getUserCredentialsByNickname(nickname: String): Future[Either[EntityNotFound, UserCredentials]]
そして、このレポを使用し、他のチェックを行い、トークンも作成するハンドラーメソッド
def process(request: LoginRequest): Future[Either[Failure, Login]] = {
for {
credentialsEither <- userRepository.getUserCredentialsByNickname(request.username)
...several other calls/checks which should 'interrupt' this for comprehension
token <- determineToken(credentials)
} yield token
getUserCredentialsByNickname(..) の後の for 内包表記の呼び出しは、この呼び出しが Right[UserCredentials] を返す場合にのみ実行する必要がありますが、返されたそれぞれからの詳細なエラー情報もハンドラーから返す必要があります。