在 if/else 中使用反应式方法的正确方法

问题描述

这段代码工作正常。无论如何它都会返回 Flux<Cars>。但我想知道它是否正确,因为 if 语句首先评估,但发布者评估订阅何时发生?

我应该使用 if/else 语句与响应式流程分开吗?

class Example {
    Flux<Cars> getCars(CarTypeEnum carTypeEnum) {
        if (carTypeEnum == CarTypeEnum.VOLVO) {
            return carRepository.getVolvoCars();
        }
        
        return carRepository.getAllCars();
    }
}

解决方法

您的代码没有任何问题。显然,在一个更大的项目的背景下,可能会出现问题,但就目前而言,没有任何问题。

带有 if 语句的方法基本上是 Cars 流的工厂方法。根据枚举,它将返回一系列不同类型的汽车。只有在订阅时,流(由存储库提供)才会开始发布。

,

嗨@Timur 你的代码没问题,但这是带有响应式编程的命令式代码,我们需要改变我们的思维方式。 Project reactor 有一个包含许多有用操作的工具包。应该测试运算符 .filter.switchIfEmpty

此代码与此说明相同:

    Flux<Cars> getCars(CarTypeEnum carTypeEnum) {
        return Flux.just(carTypeEnum).filter(type -> type == CarTypeEnum.VOLVO )
                .switchIfEmpty(other -> carRepository.getAllCars())
                .flatMap(volvo -> carRepository.getVolvoCars());
        }

问候