onExceptionResumeNext(Observable.just(10))
我有以下Observable,我试图抛出异常来测试OnError中异常的捕获。但是,当我将以下内容传递给1
2
10
onComplete
fun main(args: Array<String>) {
Observable.fromArray(1, 2, 0, 4, 5, 6)
.doOnNext {
if (it == 0) {
throw RuntimeException("Exception on 0")
}
}
.onExceptionResumeNext(Observable.just(10))
.subscribe(
{
println(it)
},
{
println("onError ${it.message}")
},
{
println("onComplete")
} )
}
时,我得到以下输出:
1
2
Observable.fromArray(1, 2, 0, 4, 5, 6)
.doOnNext {
if (it == 0) {
throw RuntimeException("Exception on 0")
}
}
.onExceptionResumeNext { Observable.just(10) }
.subscribe(
{
println(it)
},
{
println("onError ${it.message}")
},
{
println("onComplete")
} )
}
但是,如果我将lambda表达式传递给该方法,我会得到以下输出:
onExceptionResumeNext(Observable.just(10))
只是想知道这样做onExceptionResumeNext { Observable.just(10) }
和执行此Console.WriteLine("Geef 10 gehele positieve getallen.");
Console.WriteLine("Getal 1:");
int g1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 2:");
int g2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 3:");
int g3 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 4:");
int g4 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 5:");
int g5 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 6:");
int g6 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 7:");
int g7 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 8:");
int g8 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 9:");
int g9 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Getal 10:");
int g10 = Convert.ToInt32(Console.ReadLine());
int gemiddelde = (g1 + g2 + g3 + g4 + g5 + g6 + g7 + g8 + g9 + g10)/10;
int[] array = new int[10] {g1,g2,g3,g4,g5,g6,g7,g8,g9,g10};
非常感谢提前
答案 0 :(得分:4)
在第一种情况下,您将observable传递给onExceptionResumeNext
如果原始观察中出现错误,您将被重新订阅传递给onExceptionResumeNext
的可观察
这就是你获得&#34; 1&#34;和&#34; 2&#34;从原始来源然后&#34; 10&#34;和&#34; onComplete&#34;来自Observable.just(10)
在第二种情况下,您使用的是lambda语法,因此您可以有效地执行此操作:
.onExceptionResumeNext(object : ObservableSource {
void subscribe(@NonNull Observer<? super T> observer) {
Observable.just(10)
}
})
如您所见,传递给您的observer
未获订阅。因此,在&#34; 1&#34;之后没有任何东西被发现。和&#34; 2&#34;从最初的来源
你应该做的是
.onExceptionResumeNext { observer ->
Observable.just(10).subscribe(observer)
}