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

通量完成时的返回值?

  •  1
  • Johan  · 技术社区  · 6 年前

    我想在 Flux 完成。下面是一个带有(伪)代码的示例,类似于我所追求的:

    val myId : Mono<String> = fetchMyId()
    myId.flatMap { id ->
         someFlux.map { .. }.doOnNext { ... }.returnOnComplete(Mono.just(id))
    }
    
    

    也就是说,我想回去 id 之后 someFlux 已经完成。这个 returnOnComplete 功能是组成的,不存在(有一个 doOnComplete 功能,但它是副作用),这就是我问这个问题的原因。我该怎么做?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Dimitri Mestdagh    6 年前

    你可以使用 then(Mono<V>) 接线员,因为它完全按照你想要的 the documentation :

    让这个 Flux 完成,然后播放来自提供的 Mono .

    换句话说,忽略这个元素 通量 并将其完成信号转换为所提供的 Mono<V> . 错误信号在结果中重播 单声道; .

    例如:

    Mono
        .just("abc")
        .flatMap(id -> Flux.range(1, 10)
            .doOnNext(nr -> logger.info("Number: {}", nr))
            .then(Mono.just(id)))
        .subscribe(id -> logger.info("ID: {}", id));
    
        2
  •  3
  •   Simon Baslé    6 年前

    在顶部 then(Mono<V>) ,如@g00glen00b建议,有一个 thenReturn(V) 当您的延续是一个简单的 Mono.just :

    mono.then(Mono.just("foo")); //is the same as:
    mono.thenReturn("foo");