Play!2.1 的异步请求

简介: 这里介绍一下Play!2.1  的异步请求。 请一定注意:这仅仅适合于Play!2.1,其他版本几乎是不可能这样做的。所以如果你在用2.2,请自行查验官方文档。 ========================= 异步请求需要用到 Promise 类。

这里介绍一下Play!2.1  的异步请求。

请一定注意:这仅仅适合于Play!2.1,其他版本几乎是不可能这样做的。所以如果你在用2.2,请自行查验官方文档。

=========================

异步请求需要用到 Promise<Result> 类。过程很简单,不需要什么注解,也不需要修改控制器方法的返回值类型。看一个例子:

public static Result index() {
  Promise<Integer> promiseOfInt = play.libs.Akka.future(
    new Callable<Integer>() {
      public Integer call() {
        return intensiveComputation();
      }
    }
  );
  return async(
    promiseOfInt.map(
      new Function<Integer,Result>() {
        public Result apply(Integer i) {
          return ok("Got result: " + i);
        } 
      }
    )
  );
}

 方法的定义依然遵守public static Result。2.2就不再是这样了,可以去看一下。

不同的是不再返回ok()或者banrequest()方法,而是async()方法。

这个方法接受一个Promise<B>类的map方法。

map方法返回的是<B> Promise<B>,它接受一个play.libs.F.Function<A, B>的实现类,将A映射为B。

A从哪里来的呢?就是上面那个Promise<B>的返回值中。

所以整个过程就是:

首先得到一个Promise类,通过Akka的future方法返回。形如

 

Promise<A> promise= play.libs.Akka.future(
    new Callable<A>() {
      public A call() {
        return new A();
      }
    }
  );

 然后在async中调用它的map方法:

 

 

return async(
    promise.map(
      new Function<A,B>() {
        public B apply(A i) {
          return new B();
        } 
      }
    )
  );

 由于我们的方法是控制器方法,需要返回Result,把B改成Result就行。

 

 

上面的代码要运行起来还很难,因为同名的类太多了,不知道怎么导入。这是相关的类:

 

import play.libs.F.Function;
import play.libs.F.Promise;
import play.libs.Akka;
import java.util.concurrent.Callable;

 

目录
相关文章
|
前端开发
uni-app中使用 async + await 实现异步请求同步化
uni-app中使用 async + await 实现异步请求同步化
3523 0
uni-app中使用 async + await 实现异步请求同步化
|
5月前
|
前端开发 JavaScript 数据库连接
掌握 JavaScript 异步编程:从回调到 Async/Await
在现代 JavaScript 开发中,异步编程是处理非阻塞操作的关键技术。本文从早期的回调函数讲起,逐步过渡到 Promise 和 ES2017 的 async/await 语法,展示了异步编程如何变得更加简洁和强大。通过实用的技巧和最佳实践,帮助开发者避免常见陷阱,提升代码效率和可靠性。
|
7月前
|
JavaScript
js【详解】event loop(事件循环/事件轮询)
js【详解】event loop(事件循环/事件轮询)
71 0
|
8月前
|
JavaScript 前端开发 开发者
jQuery中的ready()函数:优雅地处理页面加载事件
jQuery中的ready()函数:优雅地处理页面加载事件
168 0
|
8月前
|
存储 Android开发 Kotlin
Kotlin开发安卓app,在使用 MediaPlayer 播放 res/raw 中的音乐时遇到突然中断的问题,而 onErrorListener 没有接收到任何报错
在使用 Android MediaPlayer 播放 res/raw 中的音乐时遇到中断问题,可能的原因包括资源问题、媒体文件编码格式、生命周期管理和设备资源配置。要排查问题,检查音频文件是否正确包含,格式编码是否支持,MediaPlayer 是否正确管理及释放,以及设备是否有足够存储和配置。通过设置 onErrorListener 日志和确保在 onDestroy 中释放资源来调试。如果文件过大,考虑使用 AssetManager。遵循这些步骤可帮助诊断并解决播放中断的问题。
|
9月前
|
JavaScript 前端开发
揭秘 `nextTick`:解决异步回调的利器(上)
揭秘 `nextTick`:解决异步回调的利器(上)
揭秘 `nextTick`:解决异步回调的利器(上)
|
9月前
|
JavaScript 前端开发
揭秘 `nextTick`:解决异步回调的利器(下)
揭秘 `nextTick`:解决异步回调的利器(下)
揭秘 `nextTick`:解决异步回调的利器(下)
|
9月前
|
JavaScript 前端开发
JS实现视频播放暂停循环事件
JS实现视频播放暂停循环事件
123 0
|
JavaScript
jQuery实现消息滚动播放的效果
jQuery实现消息滚动播放的效果
65 0
|
JavaScript
JQuery 方法回调$callback
JQuery 方法回调$callback
50 0

热门文章

最新文章