在游戏中! 2.2.3应用程序,我需要查询Web服务,检索Json响应并以不同方式处理它们(存储在db中,发送电子邮件,...)。 我有一个静态方法的特定类,我使用WS API连接到Web服务。每当我从 Actor 调用此静态方法来从Web服务获取数据时,它就可以正常工作。但是,当我从 Controller 调用该方法时,我得到一个运行时超时异常。
基本上,静态方法如下:
public static JsonNode test2() {
String searchURL = "https://api.angel.co/1/search";
Promise<WS.Response> promise = WS.url(searchURL)
.setQueryParameter("query", "medicast")
.setQueryParameter("type", "Startup")
.get();
Promise<JsonNode> promisedJsonNode = promise.map(
new Function<WS.Response, JsonNode>() {
public JsonNode apply(WS.Response response) {
return response.asJson();
}
}
);
JsonNode angelResp = promisedJsonNode.get();
return angelResp;
}
我意识到我可以使用 async 直接从 Controller 调用Web服务,但这只适用于返回 Result 而不是 > JsonNode 。鉴于 Controller 中方法的相对复杂性;我真的很想保持在其他地方调用Web服务的逻辑,只需调用外部静态方法来获取我需要的Json。任何帮助非常感谢。
答案 0 :(得分:0)
您正试图立即获得Promise<JsonNode>
的结果。 Promise的全部意义在于他们不立即完成,他们最终完成。
您需要从Promise<JsonNode>
返回test2()
。然后,让调用者使用map,flatMap等处理该promise,并返回自己的Promise。