2013-06-24 14 views
5

Mã bên dưới không biên dịch và tôi không biết cách khắc phục.cách sử dụng yêu cầu không đồng bộ của Play 2.1.1 và tương lai

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")) 
     } 
    }) 
    } 
} 

Dòng f2.map(y => Ok("second")) tạo ra lỗi biên dịch :

loại không phù hợp; tìm thấy: scala.concurrent.Future [play.api.mvc.SimpleResult [Chuỗi]] yêu cầu: play.api.mvc.Result

Lõi "business logic" is: f2 chỉ phải chạy if n is not 10.

Trả lời

5

f1 sẽ là tương lai của một kết quả.

Bạn đang trả lại kết quả cho trường hợp 10 và tương lai của kết quả khác. Bạn cần đưa kết quả vào cùng một cụm từ. Thử:

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