Play framework 2 多个异步数据库操作
Play framework 2 multiple async db operation
我正在执行 2 个数据库查询。
1、加载实体
2、加载实体后加载信息。
我正在异步尝试此操作。我不确定最好的方法是什么。
在 MAP 方法中,函数中的其余代码将被视为异步代码还是由调用线程执行?
例如
F.Promise<Period> period = Period.asyncLoad(periodId);
return period.map(new F.Function<Period, Result>() {
@Override
public Result apply(Period period) throws Throwable {
if ( period == null ) {
String error = Messages.get("errors.notAvailable", Messages.get("entity.period"),periodId);
return notFound(helpers.Json.buildError( error ));
} else {
Long id = countryId.isDefined() ? countryId.get():null;
**List<EntitySummary> counts = Notification.count(period, id );**
return ok(Json.toJson(counts));
}
}});
}
如您所见,有第二次调用 db List counts = Notification.count(period, id );
最好的方法是什么?我应该把它移到模型层吗?
经过一些研究,我想我找到了解决办法。需要在第一个承诺上使用平面图,并使用平面图链接尽可能多的承诺,最后一个承诺需要处理映射到 return 最终结果。
查看此处的示例:
http://www.wenda.io/questions/1616410/how-to-nest-promises-in-play-framework-with-java.html
我正在执行 2 个数据库查询。
1、加载实体 2、加载实体后加载信息。
我正在异步尝试此操作。我不确定最好的方法是什么。
在 MAP 方法中,函数中的其余代码将被视为异步代码还是由调用线程执行?
例如
F.Promise<Period> period = Period.asyncLoad(periodId);
return period.map(new F.Function<Period, Result>() {
@Override
public Result apply(Period period) throws Throwable {
if ( period == null ) {
String error = Messages.get("errors.notAvailable", Messages.get("entity.period"),periodId);
return notFound(helpers.Json.buildError( error ));
} else {
Long id = countryId.isDefined() ? countryId.get():null;
**List<EntitySummary> counts = Notification.count(period, id );**
return ok(Json.toJson(counts));
}
}});
}
如您所见,有第二次调用 db List counts = Notification.count(period, id );
最好的方法是什么?我应该把它移到模型层吗?
经过一些研究,我想我找到了解决办法。需要在第一个承诺上使用平面图,并使用平面图链接尽可能多的承诺,最后一个承诺需要处理映射到 return 最终结果。
查看此处的示例:
http://www.wenda.io/questions/1616410/how-to-nest-promises-in-play-framework-with-java.html