2016-11-24 50 views
0

Play for Scala中的這個Action.async方法應該只在第一個未來返回1時執行第二個未來,這就是爲什麼它們是嵌套的。如果第一個未來返回的結果不是1,那麼第二個未來不應執行。但我在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

你基本上沒有 - 只是因爲你正在創造另一個未來,所以它在f1上的flatMap而不是地圖。