Java 如何使用反应式方法保存多次操作后获得的值

Java 如何使用反应式方法保存多次操作后获得的值,java,rx-java,reactor,Java,Rx Java,Reactor,我想知道使用正确的反应式方法处理Mono或Flux的最佳方法 我想在几次运算后从Mono得到初始值。 例如: public Mono<SomeObject> test(Mono<Object> object) { return object .map(this::buildRequestFromObject) .flatMap(this::sendRequest)

我想知道使用正确的反应式方法处理Mono或Flux的最佳方法

我想在几次运算后从Mono得到初始值。 例如:

public Mono<SomeObject> test(Mono<Object> object) {
        return object
                .map(this::buildRequestFromObject)
                .flatMap(this::sendRequest)
                .flatMap(this::anotherUsefulWorkWithReturnImpotant)          (1)
                .then(object) <-- is it okay???                                 
                .onErrorResume(this::handleExceptionAndDoSomeWork)           (2)
                .doOnSuccess(object-> saveThisObject(object))                (3)
                .then();
    }
公共单声道测试(单声道对象){
回波信号
.map(此::buildRequestFromObject)
.flatMap(此::sendRequest)
.flatMap(此::另一个使用ReturnImportant的有用工作)(1)
。然后(对象)保存此对象(对象))(3)
.然后();
}
  • 我需要转换值并做一些工作,得到的结果不是空的,否则会出现异常
  • 之后,如果(1)抛出soemthing,则需要处理异常
  • 如果(1)毫无例外地完成,我应该保存原始对象
  • 这是最好的方法吗?或者我应该使用subcribeContext作为例子


    非常感谢你的帮助

    不,这不是最好的方式,因为您订阅了两次输入
    Mono
    ,这种方式可能不是您想要的。最好是更改您的程序流,以便此方法接受包含的
    对象
    ,而不是
    Mono
    。我知道了,谢谢!但如果我需要从
    this::buildRequestFromObject
    保存对象,以便在
    doOnAccess
    (3)中使用它,该怎么办呢。这通常是如何发生的?当我需要在多个管道步骤中保留一个对象时,我通常将该部分流提取到一个私有方法中,该方法将该对象作为输入,然后我从主管道中的平面图调用私有方法。不,这不是最好的方式,因为您订阅了两次输入
    Mono
    ,这种方式可能不是您想要的。最好是更改您的程序流,以便此方法接受包含的
    对象
    ,而不是
    Mono
    。我知道了,谢谢!但如果我需要从
    this::buildRequestFromObject
    保存对象,以便在
    doOnAccess
    (3)中使用它,该怎么办呢。这通常是如何发生的?当我需要在多个管道步骤中保留一个对象时,我通常将该部分流提取到一个私有方法中,该方法将该对象作为输入,然后从主管道中的平面图调用私有方法。