播放框架2多个异步db操作

时间:2015-01-02 18:09:57

标签: playframework playframework-2.3

我正在执行2 db查询。

1,加载实体 2,加载实体后加载信息。

我正在尝试此操作异步。我不确定最好的方法是什么。

在MAP方法中,函数中的其余代码会被视为异步还是由调用线程执行?

e.g。

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 列表计数= Notification.count(句号,id);

这样做的最佳方式是什么?我应该将它移到模型层吗?

1 个答案:

答案 0 :(得分:0)

经过一番研究后,我想我找到了解决方案。人们需要在第一个承诺上使用平面图,并使用平面图链接许多承诺,最后的承诺需要处理地图以返回最终结果。

从这里看示例:

http://www.wenda.io/questions/1616410/how-to-nest-promises-in-play-framework-with-java.html