RxJava Observable.create not emitting events for switchIfEmp



我在试验RxJava运算符时遇到了这个问题,不知道它为什么会这样。让我举一个例子,希望问题会很清楚。

我有一个水果Observable,它是我用Observable.just 创建的

Observable<String> fruits = Observable.just("Apple", "Banana", "Mango", "Strawberry", "Raspberry", "Blood Oranges");

我使用observable.create 创建了另一种可观察的语言

Observable<String> pLanguages = Observable.create(emitter -> {
emitter.onNext("Kotlin");
emitter.onNext("Java");
emitter.onNext("Python");
emitter.onNext("Javascript");
emitter.onNext("Go");
emitter.onNext("C");
emitter.onNext("Rust");
});

switchIfEmpty()运算符将订阅我们传递给它的运算符,如果源运算符没有发出任何可观测值。

使用这个过滤器,我应该可以看到基于switchIfEmpty()的定义发射的水果。

pLanguages.filter(s -> s.startsWith("Z"))
.switchIfEmpty(fruits)
.subscribe(System.out::println, System.out::println, () -> System.out.println("Complete"));

但我没有看到任何排放。然而,如果我像那样切换可观察性

fruits.filter(s -> s.startsWith("Z"))
.switchIfEmpty(pLanguages)
.subscribe(System.out::println, System.out::println, () -> System.out.println("Complete"));

我确实看到pLanguages观察器发出事件。我试过调试,但不确定为什么Observable.create()没有为switchIfEmpty()运算符发出空的Observable,而Observable.just()发出。我花了几个小时在这上面,希望这里有人能回答这个问题。

摘要

您需要在languages源上发出完成信号

示例(基于提供的源代码)

Observable<String> pLanguages = Observable.create(emitter -> {
emitter.onNext("Kotlin");
emitter.onNext("Java");
emitter.onNext("Python");
emitter.onNext("Javascript");
emitter.onNext("Go");
emitter.onNext("C");
emitter.onNext("Rust");
emitter.onComplete();
});

Kotlin(addt'l)中的示例

fun main(args: Array<String>) {
val numbers = Observable.just("one", "two", "three")
val languages = Observable.create<String> { emitter ->
emitter.onNext("java")
emitter.onNext("kotlin")
emitter.onNext("swift")
emitter.onComplete() // <-- Invoke this
}
languages
.filter { s -> s.toLowerCase().startsWith("z") }
.switchIfEmpty(numbers)
.subscribe({
System.out.println(it)
}, {
System.out.println(it)
})
numbers
.filter { s -> s.toLowerCase().startsWith("z") }
.switchIfEmpty(languages)
.subscribe({
System.out.println(it)
}, {
System.out.println(it)
})

}

输出

one
two
three
java
kotlin
swift

阅读更多

  • http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Emitter.html

相关内容

  • 没有找到相关文章

最新更新