在 Mono<String> 中转换 Mono<Void> 添加一个值

cod*_*ent 2 reactive-programming project-reactor spring-webflux

我的程序服务提供了一些返回的删除方法Mono<Void>,例如:fun delete(clientId: String) : Mono<Void>

调用后,.delete("x")我想向下游传播 clientId 以执行其他操作:

userService.get(id).map{ user -> 
        userService.delete(user.id) //This returns Mono<Void>
    .map { 
        user.id //Never called!!!
    }
    .map { userId -> 
        //other calls using the propagated userId
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是因为 delete 返回 a Mono<Void>,所以.map { user.id }永远不会调用以下内容。那么如何将 theMono<Void>转换为 aMono<String>来传播 userId?

Mar*_*nyi 5

您可以使用thenReturn运算符:

userService.get(id)
        .flatMap { user -> userService.delete(user.id).thenReturn(user.id) }
        .flatMap { id -> //other calls using the propagated userId }
Run Code Online (Sandbox Code Playgroud)