首页 > 解决方案 > 在反应式编程中,doOnNext 调用的顺序是否得到保证?

问题描述

反应式编程新手。我的 Flux 中有一系列调用,我需要确保它们按顺序完成。例如

Flux<Thing> flux = ...
.doOnNext(this::sendThing)
.doOnNext(this::persistThing)
.doOnError(error -> log.error("", error))
.blockLast();

我需要确保sendThing在之前完成persistThing。我不清楚,作为一个被动的新手,如果这是保证的话。

标签: javareactive-programmingproject-reactor

解决方案


不熟悉这种反应式实现,但看起来您正在向单个 observable 添加两个独立的订阅者,这不能保证执行顺序。

如果 send 和 persist 是阻塞(同步)函数,您可以创建一些“sendAndSync”函数。

否则,您需要将“发送”变成可观察的,并且“持久”应该是它的订阅者。您可以通过在发送完成后“发送”写入 PublishSubject 来实现此目的,并且“持久”是该 PublishSubject 的订阅者(通过 doOnNext)。


推荐阅读