java - 在反应式编程中,doOnNext 调用的顺序是否得到保证?
问题描述
反应式编程新手。我的 Flux 中有一系列调用,我需要确保它们按顺序完成。例如
Flux<Thing> flux = ...
.doOnNext(this::sendThing)
.doOnNext(this::persistThing)
.doOnError(error -> log.error("", error))
.blockLast();
我需要确保sendThing
在之前完成persistThing
。我不清楚,作为一个被动的新手,如果这是保证的话。
解决方案
不熟悉这种反应式实现,但看起来您正在向单个 observable 添加两个独立的订阅者,这不能保证执行顺序。
如果 send 和 persist 是阻塞(同步)函数,您可以创建一些“sendAndSync”函数。
否则,您需要将“发送”变成可观察的,并且“持久”应该是它的订阅者。您可以通过在发送完成后“发送”写入 PublishSubject 来实现此目的,并且“持久”是该 PublishSubject 的订阅者(通过 doOnNext)。
推荐阅读
- amazon-web-services - 如何在 AWS 管理控制台中查看 DynamoDB 查询结果计数
- python - findall 返回整个正则表达式匹配作为其第一个索引,即使其中存在一个组
- ios - 核心数据:约束更改需要迁移
- python - 如何使用 DRF 和 hvad 更新可翻译模型
- julia - 在 Julia 1.1.0 中使用 pyimport 的问题
- javascript - Azure Functions - 写入表输出绑定时处理错误
- debugging - 在 web-api 中调试时代码的绿色突出显示
- javascript - 如何在与客户端连接并行工作的nodejs服务器中创建异步函数?
- python - 在 PyQt5 中按下时如何切换按钮文本
- python - Pandas:如何按月和年过滤并按分组ID返回最大值?