【发布时间】:2017-05-12 19:22:03
【问题描述】:
(使用 RxKotlin 和 RxJava,但为了简单起见使用元代码)
许多Reactive Extensions 指南首先从现有数据创建Observable。从The introduction to Reactive Programming you've been missing,它是从单个字符串创建的
var soureStream= Rx.Observable.just('https://api.github.com/users');
类似地,来自RxKotlin 的首页,来自填充列表
val list = listOf(1,2,3,4,5)
list.toObservable()
现在考虑一个产生outStream的简单过滤器,
var outStream = sourceStream.filter({x > 3})
在这两个指南中,源事件都被声明为先验。这意味着事件的时间线有某种形式
source: ----1,2,3,4,5-------
out: --------------4,5---
如何修改sourceStream 使其更像一个管道?换句话说,sourceStream 创建期间没有可用的输入数据?当源事件可用时,立即由 out 处理:
source: ---1--2--3-4---5-------
out: ------------4---5-------
我希望找到Observable.add() 进行动态更新
var sourceStream = Observable.empty()
var outStream = sourceStream.filter({x>3})
//print each element as its added
sourceStream .subscribe({println(it)})
outStream.subscribe({println(it)})
for i in range(5):
sourceStream.add(i)
这可能吗?
【问题讨论】:
-
我认为这叫做 PublishSubject。
-
啊,好吧,是的,这看起来确实像我需要的。谢谢,永远不会发现:)
-
您可能希望从github.com/JakeWharton/RxRelay 中查看
PublishRelay,因为在错误事件之后不会停止发出事件。 -
想知道为什么教程不从这样的出版商开始。我的意思是你不能在没有反应的情况下做出反应
-
因为
Subjects 通常被避免/很少需要。 davesexton.com/blog/post/…
标签: java rx-java reactive-programming rx-kotlin