java - 如何解决另一个 promise 中的 promise ?

标签 java asynchronous playframework-2.0

我有一个操作需要从远程服务器获取电子邮件列表。然后我想使用电子邮件从另一个远程服务器获取 emailDomainInformation 列表(请注意,第二条信息取决于第一条信息)。毕竟,我想将两台服务器的数据输出到 map 上,并将其渲染到带有灰尘的页面上。

我设法在没有第二条数据的情况下通过这样做来使其工作:

public static Result index()
{
  F.Promise<Email> emailPromise = getEmailPromise(...);
  F.Promise<Result> results = emailPromise.map( new F.Function<Email, Result>()
  {
    public Result apply(Email email)
    {
      Map<String, Object> data = new HashMap<String, Object>();
      data.put("email", email.getAddress());
      data.put("domain", email.getDomain());
      dustRenderer.render(data);
    }
  }
  async(results);
}

现在,因为我想对 getEmailDomainData(email.getDomain()); 进行异步调用里面emailPromise.map()方法。我该如何处理 Promise<EmailDomain>我回来的对象?我如何将其放入 data map 传至dustRenderer

最佳答案

这是一个基本上满足您需要的示例:

public static Result social() {
    final F.Promise<WS.Response> twitterPromise = WS.url("http://search.twitter.com/search.json").setQueryParameter("q", "playframework").get();
    final F.Promise<WS.Response> githubPromise = WS.url("https://api.github.com/legacy/repos/search/playframework").get();

    return async(
            twitterPromise.flatMap(
                    new F.Function<WS.Response, F.Promise<Result>>() {
                        public F.Promise<Result> apply(final WS.Response twitterResponse) {
                            return githubPromise.map(
                                    new F.Function<WS.Response, Result>() {
                                        public Result apply(final WS.Response githubResponse) {
                                            return ok(views.html.social.render(twitterResponse.asJson().findValuesAsText("text"), githubResponse.asJson().findValuesAsText("name")));
                                        }
                                    }
                            );
                        }
                    }
            )
    );
}

在本例中,两者并行运行,但您可以将第二个 Promise 创建移动到第一个 Promise 的处理程序中。

关于java - 如何解决另一个 promise 中的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500563/

相关文章:

java - Vertx http 服务器仅使用一个工作线程实例

asynchronous - 为什么在 crossbeam_channel::select 旁边调用时 tokio::spawn 有延迟?

testing - 全局对象 onStart 未能通过我的所有测试

postgresql - Scala Play "Can' t 解析符号 db"

Java 对象创建与字符串解析

java - 连接太多(新错误)

java - 创建事务管理器 bean 时出错

swift 3 : Async queue is still blocking main thread/freezing app?

scala - 使用自定义名称 Play WebSocketActor createHandler

java - 多个包的 JAXB 命名空间前缀配置?