玩框架 scala POST 和 Future

Play framework scala POST and Future

我的控制器中有这个动作

def doRegister = Action { implicit request =>
    Future {
      Thread.sleep(5000)
    }
    Ok("")
  }

这是路线

POST /api/checkout/register controllers.shop.checkout.CheckoutAuthController.doRegister

我想要 return Ok 结果,而不用等待 Future。

它适用于 GET 请求(立即 return 秒),但不适用于 POST。超时适用,进行调用的 javascript vuejs 项目必须等待。

根据 Mateusz 的建议,卸载对 separate thread pool 的阻塞调用,例如

val ecForBlockingTasks = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(5))

def doRegister = Action { implicit request =>
  Future {
    Thread.sleep(5000)
  }(ecForBlockingTasks)

  Ok("")
}

确保在应用启动时只创建一次线程池,否则可能会导致资源泄漏。