我正在尝试处理这样的场景:我想从流的中间(mono/flux)返回,并根据某些谓词(条件)提供一些默认响应。例如:
end-result = flux
.step1()
.step2(some predicate -> return some dummy end-result from here and skip further execution)
.step3()
.step4(//returns end-result);
我无法找到这样做的方法,因为 WebFlux 本质上是一个管道,无论我在第 2 步中做什么都是第 3 步的提要,我无法避免它进一步发展。
我知道有一些方法可以使用 flatMap(obj -> some-predicate(obj)) 以 if-else 方式编写代码,但我正在寻找开箱即用并以功能方式工作的东西。
您需要添加“text/event-stream”内容类型并使用
Flux
、generate()
、create()
返回 from()
,如下所示,具体取决于您的逻辑。 state
可能是你的状态机逻辑的一个状态:
@GetMapping(produces = "text/event-stream")
public Flux<String> getTime() {
return Flux.generate(LocalDateTime::now, (state, sink) -> {
sink.next(LocalDateTime.now().toString());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
if (LocalDateTime.now().isAfter(state.plusSeconds(10))) {
sink.complete();
}
return state;
});
}
此代码将每秒在浏览器中打印时间戳,而无需等到整个
Flux
完成。