小编200*_*0ok的帖子

将多个承诺组合成一个承诺PlayFramework 2.4

我正在尝试学习Play Framework 2.4.我正在尝试使用Promise以异步方式访问不同的网页.以下是代码:

final long start = System.currentTimeMillis();

F.Function<WSResponse,Long> timing = new F.Function<WSResponse, Long>() {
    @Override
    public Long apply(WSResponse wsResponse) throws Throwable {
        return System.currentTimeMillis()-start;
    }
};
F.Promise<Long> google = ws.url("http://www.google.com").get().map(timing);
F.Promise<Long> yahoo = ws.url("http://www.yahoo.com").get().map(timing);
F.Promise<Long> bing = ws.url("http://www.bing.com").get().map(timing);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用get函数来获取所请求的页面并将结果放入Future Promise中.然后我转换/映射到long.我无法做的是如何将这三个承诺组合成一个,一旦所有三个承诺被兑换成转换/映射到json并返回结果.在Play的早期版本中,它可能已经完成F.Promise.waitAll(google,yahoo,bing).map(...)但是我无法在Play 2.4中完成.请指教

编辑1:根据下面的答案,我使用如下序列:

return F.Promise.sequence(google, yahoo, bing).map(new F.Function<List<Long>, Result>() {
            @Override
            public Result apply(List<Long> longs) throws Throwable {
                Map<String, Long> data = new HashMap<String, Long>();
                data.put("google", google.get());
                data.put("yahoo", yahoo.get());
                data.put("bing", bing.get());
                return ok(Json.toJson(data));
            }
        });
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误,无法解析google.get()方法,并且无法应用Json.我在这里失踪了什么?

编辑2. …

java json promise playframework playframework-2.0

3
推荐指数
1
解决办法
3715
查看次数

无法在Play框架中加载项目

我正在尝试使用Java学习Play框架.Play版本是2.4并使用Java 8.我正在尝试学习从Play Java执行MySQL操作.我用它activator ui来下载模板computer-database-java.但是,我得到一个错误说

(*:update) sbt.ResolveException: unresolved dependency: com.typesafe.play#sbt-fork-run-plugin;2.3.7: not found
Failed to load project.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?此外,任何使用Play连接和执行MySQL操作的教程......官方文档并不是那么好.

java mysql sbt playframework playframework-2.0

1
推荐指数
1
解决办法
1075
查看次数

标签 统计

java ×2

playframework ×2

playframework-2.0 ×2

json ×1

mysql ×1

promise ×1

sbt ×1