2013-04-30 2 views
4

스칼라를 배우고 있습니다. 필자는 Play Framework 2 Java를 사용하고 이전 스칼라를 사용하여 이전 작업을 다시 작성하려고했습니다.Play Framework 2 스칼라 WS 동기화 요청하기

동기화 WS 요청을 수행하고 내 코드의 어딘가에서 결과 개체를 가져와야합니다. 난 다시 자바에있는 동안

, 나는 이런 식으로 작업을 수행하는 데 사용 :

WS.url("someurl").get().get(5000); 

또는 T Promise<T>.get(Long timeout)

은 정확하게 할 수 있습니다.

내가 스칼라로 전환하기 때문에, 지금 play.api.libs.ws를 사용하고 난 같은 코드를 재 작성 :

val somefuture:Future[Response] = WS.url("someurl").get(); 

하지만 미래 [응답] syncly에서 응답을 얻을 수 없습니다! scala에는 .get() 메소드가 없습니다.

Response 개체를 Future[Response]에서 어떻게 동기화 할 수 있습니까?

+0

차단은 좋은 생각이 아니다, 당신은 비 차단 방식으로 코드를 작성해야한다. 크리스토퍼의 대답을보십시오. –

+1

@ JulienRichard-Foy 웹 사이트 앱을 가지고 있고 요청이 WS 또는 DB 호출과 같은 곳에서 사용 되느냐에 따라 요청 스레드가 차단되어야합니다. – Khanser

답변

9

Await.result을 사용하십시오.

import scala.concurrent.duration._ 
import scala.concurrent.Await 

.... 

val future: Future[Response] = ... 
Await.result(future, 10 seconds): Response 
관련 문제