Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax响应等待未来(scala)_Ajax_Scala_Future_Scalatra - Fatal编程技术网

Ajax响应等待未来(scala)

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(“/some”)路径中有一个未来的[a](最后一行),Ajax客户端将无法获得响应,并超过一个超时。等待不起作用。未来的onComplete/onSuccess{…}工作正常,但对于服务器来说,那么如何将其作为响应转换到客户端呢?(Scalatra框架)

服务器:

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=>{///处理所有状态代码})