【发布时间】:2014-01-28 19:49:30
【问题描述】:
我是框架 2 的新手。我看过很多关于异步调用的示例,例如: JavaAsync。但是,它们都发生在“控制器”层。这意味着函数组合的结果在这些示例中始终是“结果”对象,并且我没有看到任何其他示例返回“结果”以外的任何内容。话虽如此,由于设置不同,我需要返回一个布尔值。这是我的设置:
我有一个服务层。因此,我的控制器从用户那里获取请求,将其传递给我的服务层,我的服务层与外部服务(在我的情况下为弹性搜索)对话,外部服务将结果发送给它,我的服务层获取它并将其传递给控制器,... .
我的问题是我的异步调用发生在服务层(顺便说一句,我正在使用 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',如何从中获取价值?
谢谢!
【问题讨论】:
-
您希望使用冗长操作的弹性搜索调用返回一个布尔值?我建议你删除返回类型并将其替换为在承诺中执行的回调
标签: java asynchronous playframework-2.0 promise