reactive-programming - 基于 Single 值的条件流
问题描述
如何根据 Single 的值获得条件流?例如,在以下示例中,如果 getNextAction(nodeId) 导致空操作,我希望链结束,否则继续。每个方法都返回 Single,而不是 Observable。显然,过滤器只适用于 Observables。
getNextAction(nodeId)
.flatMap(action -> {
if (action.isEmpty()) {
sendResponse("");
}
return Single.just(action);
})
//.filter(action -> !action.isEmpty())
.flatMap(action -> prepareAction(action, nodeId)
.subscribe(response -> sendResponse(transform(response)));
解决方案
一种方法可能是:
flatMap
getNextAction()
成一个的结果Completable
- 检查动作以立即完成流,或组成一组要完成的动作(例如准备动作并发送响应)
可能看起来像这样:
getNextAction(nodeId)
.flatMapCompletable(action -> {
if(action.isEmpty()) {
return Completable.complete();
} else {
return Completable.fromAction(() -> {
// prepareAction()...
// sendResponse()...
});
}
})
.subscribe(
() -> System.out.println("## onComplete()"),
error -> System.out.println("## onError(" + error.getMessage() + ")")
);
(以上假设getNextAction()
返回 a Single<String>
)
如果不出意外,我希望它能激发一些想法。
推荐阅读
- reactjs - 在 setState 的回调中设置 setState 可以吗?
- .htaccess - 如何使用 htaccess 将所有子域 URL 重定向到主域?
- java - 我想让 Flink 能够从 Pulsar 读取数据
- python - 为什么 tkinter 网格、列配置和行配置值不会动态变化?
- c# - 使用带有逗号分隔 ID 的 LINQ 从 SQL 获取所有数据
- react-admin - SimpleFormIterator 在添加时关注第一个字段
- python - 如何获取张量布尔值并在函数中使用它?
- javascript - Chrome 扩展 - 访问隐藏链接
- html - 后退按钮未将自身与 div 的底部对齐
- javascript - 无论选择的缩放或轴粒度如何,Amcharts 都会将基于分钟的数据分组到一个每日块上