2016-09-17 104 views
1

如果我在路由器的後(「/ some」)路徑中有Future [A]作爲結果(最後一行),Ajax客戶端無法獲得響應並且超過時間到。等待不起作用。未來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