[英]What happens when I unsubscribe from an Observable chain?
我正在使用的Android应用程序中使用RxJava。 我想知道取消订阅Observable
链时会发生什么。
假设我指的是以下可观察的链:
sourceObservable
.map { ... }
.doOnNext { ... }
.flatMap { ... }
我看到3个可能的答案:
当我退订时,可观察的源停止,即sourceObservable停止发射项目。 发出的最后一个项目沿着链条下降直到结束。 这会导致每个操作员被解雇。
当我退订时,可观察到的源停止。 最后发出的项不会下降,但允许其当前正在通过的操作员完成(例如doOnNext
)。
当我退订时,可观察到的源停止并且根本不再执行任何代码。 这意味着,说我是用doOnNext
,在代码doOnNext
将停止它在哪里,不会被允许完成。
其中哪一个(如果有)是正确的? 答案取决于可观察到的源是热还是冷? 对运营商?
如果发出一个项目,并且您立即处置该流,则要停止的项目将一直处理到完成处理,但不再发出任何项目。
因此,如果您观看此示例,也许您会更好地理解
observable = Observable.interval(100, TimeUnit.MILLISECONDS)
.map(aLong -> {
System.out.println("1");
return aLong;
})
.map(aLong -> {
observable.dispose();
System.out.println("2");
return aLong;
})
.map(aLong -> {
observable.dispose();
System.out.println("3");
return aLong;
})
.doOnNext(aLong -> System.out.println("4"))
.map(aLong -> {
observable.dispose();
System.out.println("5");
return aLong;
})
.subscribe();
}
在此流中,只有第一个项目将被处理到流的结尾,因此,即使我们要做的第一项工作是取消订阅,我们仍将处理已发出的项目,因此我们将取消订阅的来源
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.