我們使用Twitter期貨(作爲Finagle堆棧的一部分),我不喜歡使用(業務)異常來控制應用程序流的概念, t出現在方法簽名中。結合期貨(Twitter)和斯卡拉
所以我有想法使用未來[或者[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後理解(.. )只應該在這個調用返回一個Right [UserCredentials]的時候被執行,而且每個返回的Either的詳細錯誤信息都應該從處理程序返回。
也許這將是更好的使用已經有欺騙期貨集成了'Try'數據結構:HTTP://嘰嘰喳喳.github.io/util/util-core/target/site/doc/main/api/com/twitter/util/Try.html –
我看過也試過,但其缺點是事實(就我而言瞭解它),它沒有在方法的簽名中指定確切的錯誤情況,或者在使用它時的類型。通過上面的簽名'未來[EntityNotFound,UserCredentials]'我可以立即看到什麼樣的故障類型可以被返回。當我嘗試使用時,我必須查看處理Try的代碼的實現。 – longliveenduro