当有人订阅我的可观察对象时,我需要收到通知。我还需要收到通知,可观察对象已出错或已完成。所以我想我应该使用doOnSubscribe
:
注册观察者订阅时要采取的操作
可观察的
and doOnTerminate
:
注册一个 Observable 完成时要采取的操作,或者
成功或有错误
然后我看到doOnUnsubscribe
:
注册观察者取消订阅时要采取的操作
可观察的
并认为对称性doOnSubscribe
/doOnUnsubscribe
会更好。
所以将doOnTerminate
总是在之前被调用doOnUnsubscribe
?如果我只是想知道事情已经“完成”,那么我选择哪个真的很重要吗?
取消订阅在反应流中发生的方式将决定来自哪一个doOnUnsubscribe
or doOnTerminate
您可以使用。可能有以下几种情况:
可观察的完成/错误触发取消订阅
在这种情况下,双方doOnTerminate
and doOnUnsubscribe
将被调用doOnTerminate
首先被呼叫。
下面的示例将打印两者终止 and 取消订阅.
Subscription subscribe = Observable.empty() // source terminates immediately
.subscribeOn(Schedulers.newThread())
.doOnTerminate(() -> System.out.println("terminated"))
.doOnUnsubscribe(() -> System.out.println("unsubscribed"))
.subscribe();
TimeUnit.SECONDS.sleep(1);
subscribe.unsubscribe(); // by this time already unsubscribe would have happened
在 Observable 完成之前以编程方式调用取消订阅
仅在这种情况下doOnUnsubscribe
将被调用。当您拥有无限运行的源或像用户点击的可观察对象一样热门的源时,发生这种情况的可能性更普遍。
下面的例子只会打印取消订阅.
Subscription subscribe = Observable.never() // source never terminates
.subscribeOn(Schedulers.newThread())
.doOnTerminate(() -> System.out.println("terminated"))
.doOnUnsubscribe(() -> System.out.println("unsubscribed"))
.subscribe();
TimeUnit.SECONDS.sleep(1);
subscribe.unsubscribe(); // this will trigger unsubscribe
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)