代码之家  ›  专栏  ›  技术社区  ›  Aleksey Kozel

Mono如何订阅

  •  1
  • Aleksey Kozel  · 技术社区  · 6 年前

    我正在尝试创建以下链:

    Mono<Object1> oneMono = Mono.just("1");
    Mono<Object2> twoMono = Mono.just("2");
    
    Mono<Mono<Object5>> resultMono = Mono.zip(oneMono, twoMono, (one, two) -> { 
    
        Mono<Object3> threeMono = Mono.just("3");
        Mono<Object4> fourMono = Mono.just("4");
    
        return Mono.zip(threeMono, fourMono, (three, four) -> {
            return "5";
        }
    }) // get just Mono<Object5> here?
    
    resultMono.subscribe(mono -> { 
        mono.subscribe();  // ugly double subscribe() !!
    });
    

    因此,我需要得到5分。但在执行1、2和3、4之前。

    代码运行正常,但我想退出

    从…起 Mono<Mono<Object5>> double subscribe

    Mono<Object5> single subscribe

    是否有Zip的模拟平面图?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Dmitry    6 年前

    嗯,你已经有了。您只需使用平面图:

    Mono<String> oneMono = Mono.just("1");
    Mono<String> twoMono = Mono.just("2");
    
    Mono.zip(oneMono, twoMono, (one, two) -> {
        Mono<String> threeMono = Mono.just("3");
        Mono<String> fourMono = Mono.just("4");
    
        return Mono.zip(threeMono, fourMono, (three, four) -> {
            return "5";
        });
    })
    .flatMap(stringMono -> stringMono)
    .doOnNext(System.out::println)
    .subscribe();