代码之家  ›  专栏  ›  技术社区  ›  clay

垂直。x链异步逻辑?

  •  0
  • clay  · 技术社区  · 8 年前

    有没有更明智的方法来编写以下超级简单的set/get/close测试程序?注意,我必须复制Redis close代码,并将其包含在set error path和get complete path中。

    import io.vertx.core.Vertx;
    import io.vertx.redis.RedisClient;
    import io.vertx.redis.RedisOptions;
    
    public class RedisTest {
        public static void main(String[] args) throws Exception {
            Vertx vertx = Vertx.vertx();
    
            String host = "localhost";
    
            final RedisClient client = RedisClient.create(vertx,
                    new RedisOptions().setHost(host));
    
            client.set("key", "value", r -> {
                if (r.succeeded()) {
                    System.out.println("key stored");
    
                    client.get("key", s -> {
                        if (s.succeeded()) {
                            System.out.println("Retrieved value: " + s.result());
                        } else {
                            System.out.println("Connection or Operation Failed " + s.cause());
                        }
    
                        System.out.println("Closing Redis connection");
                        client.close(t -> {
                            if (s.succeeded()) {
                                System.out.println("Redis closed successfully.");
                            } else {
                                System.out.println("Connection or Operation Failed " + t.cause());
                            }
    
                            System.out.println("Closing vertx");
                            vertx.close();
                        });
                    });
                } else {
                    System.out.println("Connection or Operation Failed " + r.cause());
    
                    System.out.println("Closing Redis connection");
                    client.close(s -> {
                        if (s.succeeded()) {
                            System.out.println("Redis closed successfully.");
                        } else {
                            System.out.println("Connection or Operation Failed " + s.cause());
                        }
    
                        System.out.println("Closing vertx");
                        vertx.close();
                    });
                }
            });
    
            System.out.println("Exiting main");
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   zella    8 年前

    我建议看反应式api io.vertx.rxjava.redis.RedisClient

    例如(我没有测试过这段代码):

        client.rxSet("key", "value")
          .flatMap(r -> client.rxGet("key"))
          //calls on error or success
          .doAfterTerminate(() -> {
              client.rxClose();
              vertx.close();
          }) 
          .subscribe(
            success -> System.out.println("Chain completed"),
            //all errors will be there
            error -> System.out.println(error.getMessage())
          );