2013-06-24 2 views
5

Код ниже не компилируется, и я не знаю, как его исправить.Как использовать Play 2.1.1 асинхронные запросы и фьючерсы

def doAsync(n: Int) = Action { 
    import scala.concurrent.ExecutionContext.Implicits.global 

    Async { 
    val f1 = Future.successful(n) 

    f1.map(x => x match { 
     case 10 => Ok("first") 
     case _ => { 
     val f2 = Future.successful(n) 
     f2.map(y => Ok("second")) 
     } 
    }) 
    } 
} 

Линия f2.map(y => Ok("second")) производит ошибку компиляции:

типа несоответствия; найдено: scala.concurrent.Future [play.api.mvc.SimpleResult [String]] требуемое: play.api.mvc.Result

Ядро "business logic" is: f2 только должен работать if n is not 10.

ответ

5

f1 будет будущим результатом.

Вы возвращаете результат для случая 10, а в противном случае - результат в противном случае. Вы должны привести результат к тем же условиям. Попытка:

f1 flatMap {x => x match { 
    case 10 => Future.successful(Ok("first")) 
    case _ => { 
    val f2 = Future.successful(n) 
    f2.map(y => Ok("second")) 
    } 
} 
Смежные вопросы