raj*_*aju 12 java promise java-8
我在java 8中使用play2.5.我正在向服务器发出POST请求
WSRequest request = ws.url("http://abababa .com");
WSRequest complexRequest = request.setHeader("X-API-Key", "xxxxxx")
.setHeader("Content-Type", "application/x-www-form-urlencoded")
CompletionStage<WSResponse> responsePromise = complexRequest.post("grant_type=password"
+ "&username=xxxxx&password=yyyyy");
CompletionStage<JsonNode> jsonPromise = responsePromise.thenApply(WSResponse::asJson);
Run Code Online (Sandbox Code Playgroud)
如何打印响应的最终响应.我想返回部分响应此函数.与同步代码相比,调用此函数的函数是否也具有不同的代码?
小智 2
问题是所有这些代码都是异步执行的。如果您确实想从方法中返回结果,则必须阻塞直到获得结果。阻塞不好,因为它会影响性能。通常您希望按原样返回 CompletionStage 并让调用者决定如何处理它。但是,如果您必须绝对返回结果,则示例代码如下。
WSRequest request = ws.url("http://abababa .com");
WSRequest complexRequest = request.setHeader("X-API-Key", "xxxxxx")
.setHeader("Content-Type", "application/x-www-form-urlencoded")
CompletionStage<WSResponse> responsePromise = complexRequest.post("grant_type=password"
+ "&username=xxxxx&password=yyyyy");
CompletionStage<JsonNode> jsonPromise = responsePromise.thenApply(WSResponse::asJson);
Object waitGuard = new Object();
AtomicReference<JsonNode> resultReference = new AtomicReference();
synchronized(waitGuard){
jsonPromise.thenAccept( jsonNode -> {
resultReference.set(jsonNode);
waitGuard.notify();
});
waitGuard.wait();
}
return resultReference.get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7310 次 |
| 最近记录: |