2016-07-12 4 views
0

組み込みのplayframeworkキャッシュAPIを使用したいが、未来があるときにこのWebサービス要求をキャッシュする方法がわからない。先物付きキャッシュAPIの使用方法

def getUser(username: String): Future[Option[User]] = { 
    ws.url("...").get.map { response => 
    response.json.validate[User] match { 
     case JsSuccess(user, _) => Some(user) 
     case JsError(errors) => { 
      // log errors 
      None 
     } 
    } 
    } 
} 

キャッシュキーは今のところユーザー名になります。

ここでキャッシュAPIはどのように使用しますか?

私はgetOrElseパターンを使用したい:

val user: User = cache.getOrElse[User]("item.key") { 
    User.findById(connectedUser) 
} 

をしかし、今後とオプションは、それを使って行く方法で私を混乱さ。

答えて

1

私はこのようにそれを行うだろう:https://github.com/playframework/playframework/issues/5912

:さておき、プレイキャッシュAPIは Future秒を返すAPIを持っていませんが、彼らはそれに取り組んでいるよう

def fromWebservice(username: String): Future[Option[User]] = 
    ws.url("..").get.map(validate) // validate does the json validate thing 

def getUser(username: String): Future[Option[User]] = 
    cache.getAs[User](username) match { 
    case Some(x) => 
     Future.successful(Some(x)) 
    case None => 
     fromWebservice(username).map(_.map { user => 
     cache.set(username, user) 
     x 
     }) 
    } 

関連する問題