这里介绍一下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;
相关推荐
Play2.1是该项目采用的版本,提供了异步I/O和actors模型,这使得Web应用能更高效地处理请求。Play框架还内置了对JSON的支持,这对于构建RESTful API非常方便,从而可以轻松地与前端进行交互。 **ExtJS 4.2**: ExtJS...
在Play框架中,可以通过实现Job来处理异步任务。 7.2 BootstrapJob和ScheduledJob 了解BootstrapJob和ScheduledJob的不同用途以及如何直接调用Job。 **八HTTP异步编程** 8.1 挂起HTTP请求 掌握如何在Play框架中挂...
"play-crud-example" 是一个基于 Play Framework 2.1.x 的示例项目,它主要用于演示如何在Java 1.6环境下实现基本的CRUD(创建、读取、更新、删除)操作。Play Framework 是一个现代、开源的Web应用框架,以Scala和...
- 发布上线:通过Google Play或其他第三方应用市场进行发布,供用户下载安装。 综上所述,基于安卓Android的招聘信息系统是一个结合了移动技术与人力资源管理的创新应用,旨在提升招聘效率,优化求职体验,为企业和...
2.1 UI设计:讲解XML布局文件的编写,如线性布局、相对布局、约束布局等,以及自定义View的实现。 2.2 Activity与Intent:解释Activity的生命周期,Intent的种类及使用,如何实现界面间的跳转。 2.3 Service:阐述...
AsyncTask是一个轻量级的异步任务框架,适用于执行耗时操作,如网络请求或数据库操作,同时保持UI线程的响应性。它有三个泛型参数,分别代表后台操作类型、进度更新类型和结果类型。 **5. SharedPreferencesCompat*...
**2.1 布局规划** - **首页**:显示热门团购信息及分类导航。 - **分类页**:展示不同类别下的团购商品列表。 - **详情页**:提供团购商品的具体信息。 - **购物车**:用户可添加商品至购物车进行批量购买。 - **...
2.1 Android系统架构 Android是一个开源的移动操作系统,主要由Linux内核、系统库层、应用程序框架层以及应用程序四部分组成。Linux内核为Android提供了基本的硬件驱动支持和系统服务。系统库层包含了各种库,如...
- **网络请求**:通过AsyncTask实现异步加载数据,避免阻塞UI线程。 - **错误处理**:设置异常捕获机制,对可能出现的问题进行有效处理。 - **性能优化**:定期对App进行性能检测与调优,提升用户体验。 通过上述...
- **异步处理**:使用AsyncTask或其他库进行后台任务处理。 #### 2.4 多媒体应用开发 - **音频播放**:使用MediaPlayer类播放音频文件。 - **视频播放**:使用VideoView类播放视频文件。 - **摄像头**:调用Camera ...
3.1 异步编程:在移动环境中,为了保持应用的流畅性,通常使用异步编程处理耗时操作,如网络请求和数据库操作。Java提供了IntentService、AsyncTask等机制来实现异步任务。 3.2 数据存储:Java配合SQLite数据库,...
1. `actions.js`:用于处理异步操作,如数据请求。 2. `getters.js`:提供计算属性,用于从 state 中派生出新的可读状态。 3. `index.js`:整合其他模块,创建 Vuex store 实例。 4. `mutations.js`:定义状态的同步...
协程提供了一种高效的并发编程手段,特别适合于那些需要大量并发执行的任务,例如网络请求处理、I/O操作等。 #### 4. 轻量级线程 Stackless Python中的轻量级线程(微进程)比传统操作系统级别的线程更加轻便。这...
客户端发送“play”命令,订阅服务器上的指定流,然后接收并解码数据。 3.4 断线重连 为了应对网络不稳定,客户端需要实现断线检测和自动重连机制,确保数据传输的连续性。 四、PHP 7+的性能优化 4.1 引擎优化 ...
2.1.28 WindowState属性——窗体的窗口状态 151 2.2 文本类控件 152 2.2.1 AllowEdit属性——是否可以编辑列表项 152 2.2.2 AppendText方法——追加文本 152 2.2.3 BeginEdit方法——将单元格置于编辑模式下 153 ...