我正在创造一个没有必要的承诺。
(使用Java Play WS)
public CompletionStage<Result> doSomething() {
JsonNode json = request().body().asJson();
/*
* Promise not required. Just return BadRequest.
*/
if (json == null) {
// I think I am overkilling it here
ObjectNode result = Json.newObject();
result.put("error", "some error");
return CompletableFuture.supplyAsync(() -> {return 0;})
.thenApply(i -> badRequest(result));
}
/*
* Promise required.
*/
return ws.url("http://www.example.com/")
.get()
.thenApply(response -> {
String body = response.getBody();
// Do something
return ok(body);
});
}
由于代码的第二部分,我需要返回CompletionStage<Result>
。
我真的需要这个简单响应的所有这些异步代码吗?我的return 0
对代码没用,只是没有引发语法错误。
答案 0 :(得分:0)
比预期容易。 return 0
它完全没必要,因为它可以被实际的返回代码替换,也避免了thenApply
重复。
因此,不需要承诺的部分可以替换为:
if (json == null) {
return CompletableFuture.supplyAsync(() -> {
ObjectNode result = Json.newObject();
result.put("error", "some error");
return badRequest(result);
});
}
而且,Java Play Result
and CompletionStage<Result>
are handled by the same way。