Java同步承诺(使用CompletionStage)

时间:2017-07-20 21:23:39

标签: java playframework promise

我正在创造一个没有必要的承诺。

(使用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对代码没用,只是没有引发语法错误。

1 个答案:

答案 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