如何正确且顺序地链接响应式调用

How to chain reactive calls correctly and sequentially

我正在尝试按以下顺序拨打电话:

  1. 保存对象

  2. 仅当第一步完成后才发布对象创建事件

  3. Return 一个 Flux 列表 我目前拥有的是:

    return dbSaveObject(object) //this returns Mono of created object
        .doOnSuccess(s -> hermes.publishEvent(CREATE)) //publishEvent() here returns Mono<Void>
        .thenMany(Flux.just(object))
    

这是否会按要求工作和发布事件,或者我应该使用 zipWhen() 而不是 doOnSuccess()?

doOn... 是 so-called side-effect 运算符,不应用于构建反应流。

万一 publishEvent returns Mono<Void> 你可以使用下面的

return dbSaveObject(object)
        .flatMap(savedObject ->
                hermes.publishEvent(CREATE)
                        .thenReturn(savedObject)
        );