我會擺脫Either[A,Future[A]]
並將其轉換爲一個Future[A]
開始。
def getUserByKey(key:Int) : Future[User] =
cache.users.contains(key) match {
case true => Future(cache.users(key))
case false => Future(User(key = 101, name = "John Doe")) // db call
}
這將讓事情簡單了很多,我想...
如果cache
在上下文之間共享,一旦被保存就沒有必要做出更多的數據庫調用來獲取特定用戶。
def saveUserCache(u:User) : Future[Unit] = Future{
cache.users.contains(u.key) match {
case true => cache.users(u.key) = u
case false => cache.users += (u.key -> u)
}
}
那麼可以混合使用這些期貨創建其他期貨
def renderUser(key:Int) : Future[String] =
for {
user : User <- getUserByKey(key)
update : Unit <- saveUserCache(user)
output : String <- Future(s"${user.key}: ${user.name}")
} yield output
這是否回答你的問題?
1)您可以撰寫'期貨',例如'將[未來]列入'未來[列表]',但是否應該是另一回事。 2)郵政編碼把所有東西都放到上下文中。 – sebszyller