Ajax响应等待未来(scala)
如果我在路由器的post(“/some”)路径中有一个未来的[a](最后一行),Ajax客户端将无法获得响应,并超过一个超时。等待不起作用。未来的onComplete/onSuccess{…}工作正常,但对于服务器来说,那么如何将其作为响应转换到客户端呢?(Scalatra框架) 服务器:Ajax响应等待未来(scala),ajax,scala,future,scalatra,Ajax,Scala,Future,Scalatra,如果我在路由器的post(“/some”)路径中有一个未来的[a](最后一行),Ajax客户端将无法获得响应,并超过一个超时。等待不起作用。未来的onComplete/onSuccess{…}工作正常,但对于服务器来说,那么如何将其作为响应转换到客户端呢?(Scalatra框架) 服务器: post("/stations/test") { Future[Int] { // parse jsonData ... Thread.sleep(3000) 1 }.onCo
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)
}
onComplete
返回Unit
。但是,您需要从服务器向客户端发送正确的响应。在将来使用map
创建响应
post("/stations/test") {
Future[Int] {
// parse jsonData ...
Thread.sleep(3000)
1
}.map { data =>
Response(data)
}
}
onComplete
返回Unit
。但是,您需要从服务器向客户端发送正确的响应。在将来使用map
创建响应
post("/stations/test") {
Future[Int] {
// parse jsonData ...
Thread.sleep(3000)
1
}.map { data =>
Response(data)
}
}
谢谢如果我将response(HttpServletResponse的类型)替换为“response(data)”,那么它工作得很好。祝你周末愉快!客户端应该是:Ajax.post(“/stations/test”,“abc”).recover{case dom.ext.AjaxException(req)=>/…}.map(req=>{///处理所有状态代码})谢谢!如果我将response(HttpServletResponse的类型)替换为“response(data)”,那么它工作得很好。祝你周末愉快!客户端应该类似于:Ajax.post(“/stations/test”,“abc”).recover{case dom.ext.AjaxException(req)=>/…}.map(req=>{///处理所有状态代码})