首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JsonNode中的Promise[JsonNode]中获取该值并返回该值

从JsonNode中的Promise[JsonNode]中获取该值并返回该值
EN

Stack Overflow用户
提问于 2014-10-23 07:55:51
回答 2查看 2.8K关注 0票数 2

我正在用Java编写一个剧本2.3.2应用程序。

在我的应用程序中,我调用了用Scala编写的另一个模块的方法。

这个方法返回一个Json响应,我尝试使用WS获得这个响应。

这是我的方法实现:

代码语言:javascript
复制
public static JsonNode getCorrelationData() {
        WSRequestHolder holder = WS.url(ConfigFactory.load().getString("host") + "/recommendation/correlation");
        Promise<JsonNode> jsonPromise = holder.get().map(
                new Function<WSResponse, JsonNode>() {
                    public JsonNode apply(WSResponse response) {
                        if (response.getStatus() != 200) {
                            Logger.error("Error on get correlation data");
                            Logger.error("Response status code: " + response.getStatus());
                            Logger.error("Response status text: " + response.getStatusText());
                        }

                        return response.asJson();
                    }
                });



        //here I want to obtain the JsonNode inside the jsonPromise object, and return it.
    }

但是问题是回调返回一个承诺,而我的方法需要返回一个JsonNode。

我如何在承诺中获得JsonNode??我找不到解决问题的办法。

在Scala中,我知道我可以在flatMap上使用FutureT。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-23 08:26:00

您的方法执行异步操作,因此不应该返回JsonNode,而应该返回Promise<JsonNode>

从概念上讲--这是有意义的--您的方法并不是立即获取数据,而是分派一个与所述数据相关的任务,该任务将在将来完成一段时间。您可以通过打开承诺来访问响应。您可以返回Promise<JsonNode>,然后在调用方站点上调用.map来打开该值。

您还可以根据承诺调用.get(),这将迫使数据等待结果(即返回jsonPromise.get(),但这否定了使用承诺的好处)。请注意,这里的get()与holder上的get()不同,这很好,因为它只是返回承诺。

票数 7
EN

Stack Overflow用户

发布于 2014-10-23 08:29:33

相反,返回结果承诺:

代码语言:javascript
复制
public static Promise<Result> getPromise() {
    WSRequestHolder url = WS.url("url");
    Promise<Result> promise = url.get().map((r) -> {
        if (r.getStatus() == 200) {
            return ok(r.asJson());
        } else {
            return badRequest("Bad request");
        }
    });
    return promise;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26523544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档