问题描述
这段代码工作正常。无论如何它都会返回 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());
}
问候