Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
Java 如何从异步播放操作返回结果_Java_Asynchronous_Playframework 2.0 - Fatal编程技术网

Java 如何从异步播放操作返回结果

Java 如何从异步播放操作返回结果,java,asynchronous,playframework-2.0,Java,Asynchronous,Playframework 2.0,我尝试使用play框架开发一个简单的REST-API,我坚持以下几点: 我有两种方法:获取一些数据库数据 public CompletionStage<PagedList<Computer>> page(int page, int pageSize, String sortBy, String order, String filter) { return supplyAsync(() -> { return ebeanServer.find(

我尝试使用play框架开发一个简单的REST-API,我坚持以下几点:

我有两种方法:获取一些数据库数据

public CompletionStage<PagedList<Computer>> page(int page, int pageSize, String sortBy, String order, String filter) {
    return supplyAsync(() -> {
        return ebeanServer.find(Computer.class).where()
                .ilike("name", "%" + filter + "%")
                .orderBy(sortBy + " " + order)
                .fetch("company")
                .setFirstRow(page * pageSize)
                .setMaxRows(pageSize)
                .findPagedList();
    } , executionContext);
}
public CompletionStage页面(int-page、int-pageSize、字符串排序、字符串顺序、字符串过滤器){
返回SupplySync(()->{
返回ebeanServer.find(Computer.class).where()
.ilike(“名称”,“百分比”+过滤器+“%”)
.orderBy(排序方式+“”+订单)
.fetch(“公司”)
.setFirstRow(页面*页面大小)
.setMaxRows(页面大小)
.findPagedList();
},执行上下文);
}
第二个是:返回数据

public CompletionStage<Result> list(int page, String sortBy, String order, String filter) {
    // Run a db operation in another thread (using DatabaseExecutionContext)
    return computerRepository.page(page, 10, sortBy, order, filter).thenApplyAsync(list -> {
        // This is the HTTP rendering thread context
        return ok(views.html.list.render(list, sortBy, order, filter));
    }, httpExecutionContext.current());
}
public CompletionStage列表(整型页面、字符串排序、字符串顺序、字符串过滤器){
//在另一个线程中运行db操作(使用DatabaseExecutionContext)
返回computerRepository.page(第10页,排序、顺序、筛选)。然后应用同步(列表->{
//这是HTTP呈现线程上下文
返回ok(views.html.list.render(list、sortBy、order、filter));
},httpExecutionContext.current());
}
现在,我想在将数据返回到客户机之前检查一些值:(例如,一些头值)

public CompletionStage列表(整型页面、字符串排序、字符串顺序、字符串过滤器){
如果(x=“某些数据”){
//在另一个线程中运行db操作(使用DatabaseExecutionContext)
返回computerRepository.page(第10页,排序、顺序、筛选)。然后应用同步(列表->{
//这是HTTP呈现线程上下文
返回ok(views.html.list.render(list、sortBy、order、filter));
},httpExecutionContext.current());
}否则{
返回正常(“值不是某些数据…”)
}
}
问题是,我不能返回一个简单的结果…最好的方法是什么?也许在异步方法中扭曲结果?这是一个好的做法吗

此github站点的示例如下:

解决方案:
对于来自Andrey Kuba的awnser,我再次阅读了CompletableFuture和CompletionStage的javadoc。这似乎是正确的方法!对于所有希望在异步(这非常重要)中使用Play framework的人,请查看示例并阅读CompletionStage()和CompletableFuture()的javadoc。记住这一点,编写异步代码是非常简单和愉快的!

您需要像

} Else {
   return CompletableFuture.completedFuture(ok("value is Not some Data ..."))
}
} Else {
   return CompletableFuture.completedFuture(ok("value is Not some Data ..."))
}