2016-11-24 2 views
0

스칼라에서 Play의 Action.async 메서드는 첫 번째 미래가 1을 반환하는 경우에만 두 번째 미래를 실행해야하므로 중첩됩니다. 첫 번째 미래가 1과 다른 결과를 반환하면 두 번째 미래가 실행되지 않아야합니다. 하지만 f2.map에 다음과 같은 컴파일 오류가 발생합니다. 이 오류가 발생한 이유와 해결 방법은 무엇입니까?Play의 스칼라 중첩 된 미래가 컴파일되지 않습니다.

타입 불일치; 발견 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하십시오.

관련 문제