2016-11-24 8 views
0

PlayのScalaのAction.asyncメソッドは、最初の未来が1を返す場合にのみ、2番目の未来を実行する必要があります。最初の未来が1と異なる結果を返す場合、2番目の未来は決して実行されるべきではありません。しかし、f2.mapに次のコンパイルエラーが発生します。なぜこのエラーとそれを修正するのですか?Play for Scalaのネストされた先物はコンパイルされません

タイプミスマッチ;見つかりました: scala.concurrent.Future [scala.concurrent.Future [play.api.mvc.Result]] 必要:play.api.mvc.Result

def index = Action.async { request => 

    val f1 = Future {1} 
    f1.map { 
     access => if (access==1) { 
      val f2 = Future {2} 
      f2.map { // <-- compilation error 
       result => { 
       val json = JsObject(Seq(
         "acc" -> JsNumber(access), 
         "ret" -> JsString("0") 
       )) 
        Ok(json) 
       } 
      } 
     } 
     else { 
      val json = JsObject(Seq(
       "acc" -> JsNumber(0), 
       "ret" -> JsString("0") 
     )) 
      Future.successful(Ok(json)) 

     } 
    } 
    } 

答えて

2

あなたは基本的にそこにいる - ちょうどあなたが別の未来を作り出しているので、mapではなくf1のflatMap。

関連する問題