2016-09-17 4 views
1

라우터의 게시물 ("/ some") 경로에서 Future [A]가 결과 (마지막 행) 인 경우 Ajax 클라이언트는 응답을받지 못하고 a를 초과합니다. 타임 아웃. 기다리는 것은 효과가 없습니다. Future onComplete/onSuccess {...}는 잘 작동하지만 서버에서는 응답으로 클라이언트로 어떻게 변환합니까? (Scalatra 프레임 워크)미래의 Ajax 응답 대기 (scala)

서버 :

post("/stations/test") { 
    Future[Int] { 
    // parse jsonData ... 
    Thread.sleep(3000) 
    1 
    }.onComplete { x => 
    // do something on server ... 
    } 
} 

클라이언트 :

@JSExport 
def testFuture() = { 
    val request = Ajax.post("/stations/test", jsonData) 
} 

답변

0

onComplete 반환 Unit. 그러나 서버에서 클라이언트로 적절한 응답을 보내야합니다. 나중에 map을 사용하여 응답을 만드십시오.

post("/stations/test") { 
    Future[Int] { 
    // parse jsonData ... 
    Thread.sleep(3000) 
    1 
    }.map { data => 
    Response(data) 
    } 
} 
+1

감사합니다! "응답 (데이터)"대신 응답 (HttpServletResponse 유형)을 입력하면 제대로 작동합니다. 좋은 주말 되세요! 클라이언트 측되어야 같은 Ajax.post ("/ 기지국/검사", "ABC") .recover { 경우 dom.ext.AjaxException (REQ) => // ...} .map (req => { // 모든 상태 코드 처리 }) – aepetelin