代码之家  ›  专栏  ›  技术社区  ›  Ukonn Ra

如何使用Vert从EventBus获得结果。十、

  •  0
  • Ukonn Ra  · 技术社区  · 6 年前

    伙计们!

    使用垂直时。x、 我发现在与其他Verticle通信时,我无法从EventBus获得结果。

    class Result<T> {
        public T value;
        public String message;
        // ...
    }
    
    private Result<Integer> someMethod() {
            try {
                var json = new JsonObject();
                vertx.eventBus().<JsonObject>send(Service.EVENT_BUS_ADDRESS, json, ar -> {
                    if (ar.succeeded()) {
                        var result = new Result<List>(ar.result().body());
                        if (result.isSuccessful()) {
                            Result.succeed(result);
                        } else {
                            Result.fail(result.message);
                        }
                    } else {
                        Result.fail("Remote server error");
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
                return Result.fail(e.getMessage());
            }
            return // how can I return the result in EventBus???
        }
    

    那么如何从 Async 阻止并返回它?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gerald Mücke    6 年前

    你不应该 回来 而是通知处理程序

    以下代码 假设 你的 Result.succeeed Result.fail 方法返回 Result

    private void someMethod(Handler<Result> resultHandler) {
      ...
      vertx.eventBus().<JsonObject>send(Service.EVENT_BUS_ADDRESS, json, ar -> {
                if (ar.succeeded()) {
                    var result = new Result<List>(ar.result().body());
                    if (result.isSuccessful()) {
                        resultHandler.handle(Result.succeed(result));
                    } else {
                        resultHandler.handle(Result.fail(result.message));
                    }
                } else {
                    resultHandler.handle(Result.fail("Remote server error"));
                }
      ...
    }