我是新玩框架2.我看过很多关于异步调用的例子: JavaAsync。但是,所有这些都发生在“控制器”层。这意味着在这些示例中,函数组合的结果总是“Result”对象,并且我还没有看到任何其他示例返回“Result”以外的任何其他示例。话虽如此,由于不同的设置,我需要返回布尔值。这是我的设置:如何在PlayFramework 2的服务层中进行异步调用?
我有一个服务层。因此,我的控制器从用户那里获取请求,将它传递给我的服务层,我的服务层与外部服务(在我的例子中是elasticsearch)通信,外部服务发送它的结果,服务层获取它并将它传递给控制器,...。
我的问题是,我的异步调用服务层中发生的(顺便说一句,我使用以防万一play2-elasticsearch插件):
@Override
public Boolean saveTask(TaskInfo taskInfo){
final TaskEntity taskEntity = EntityTransformer.createNewTaskEntity(taskInfo);
// save to es
F.Promise indexResponsePromise = taskEntity.indexAsync();
return indexResponsePromise.map(new F.Function() {
@Override
public Boolean apply(IndexResponse indexResponse) throws Throwable {
if (indexResponse.getId().equals(taskEntity.id.toString())) {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
});
}
有,上面的代码,我得到一个错误,告诉我saveTask方法应该返回'F.Promise'。现在的问题:
- 我怎样才能返回一个“布尔”而不是'F.Promise'?
- 如果返回'F.Promise',我该如何从中获得价值?
谢谢!
你想要一个布尔值作为返回使用弹性搜索调用是漫长的操作? 我建议你删除返回类型并将其替换为在promise中执行的回调 –