[英]RxJava - What is the difference between delay and delaySubscription?
我試圖了解delay和delaySubscription運算符之間的區別。
本文檔描述了延遲運算符:
延遲運算符通過在發出每個源Observable項目之前暫停特定的時間增量(由您指定)來修改其源Observable。 這樣的效果是將Observable發出的整個項目序列按時間向前移動指定的增量
delaySubscription的描述如下:
還有一個運算符,可用於延遲對源Observable的訂閱:delaySubscription。
但是,當我測試這兩個運算符的行為時,在我看來它們的工作方式相同。
這是我的觀察:
Observable observable = Observable.just(5, 3, 4, 2);
在這里我使用延遲運算符:
observable = observable.delay(3, TimeUnit.SECONDS);
這是我的觀察者,它記錄何時調用其方法之一
Observer observer = new Observer() {
@Override
public void onSubscribe(Disposable d) {
Log.d("RxJavaTag", "onSubscribe");
}
@Override
public void onNext(Object o) {
Log.d("RxJavaTag", "onNext: " + o);
}
@Override
public void onError(Throwable e) {
Log.d("RxJavaTag", "onError:" + e.toString());
}
@Override
public void onComplete() {
Log.d("RxJavaTag", "onComplete");
}
};
觀察者在這里訂閱了可觀察者:
observable.subscribe(observer);
結果,當我使用延遲運算符時,我得到以下日志:
03-25 17:45:34.156 onSubscribe
03-25 17:45:37.160 onNext: 5
03-25 17:45:37.160 onNext: 3
03-25 17:45:37.160 onNext: 4
03-25 17:45:37.160 onNext: 2
03-25 17:45:37.160 onComplete
以及使用delaySubscription運算符時的以下日志:
03-25 17:49:22.540 onSubscribe
03-25 17:49:25.544 onNext: 5
03-25 17:49:25.544 onNext: 3
03-25 17:49:25.544 onNext: 4
03-25 17:49:25.544 onNext: 2
03-25 17:49:25.544 onComplete
正如您在日志中看到的那樣,它們以相同的方式工作。 我不明白他們之間的區別。 我嘗試使用ConnectableObservable測試它-相同的行為。
以我的理解,顧名思義,不應延遲Subscription運算符以這種方式工作:
[SOME DELAY - FOR EXAMPLE 3 SECONDS]
03-25 17:49:25.540 onSubscribe
03-25 17:49:25.544 onNext: 5
03-25 17:49:25.544 onNext: 3
03-25 17:49:25.544 onNext: 4
03-25 17:49:25.544 onNext: 2
03-25 17:49:25.544 onComplete
也許我做錯了-但我無法理解其中的區別。 您能否解釋一下delay和delaySubscription之間的區別?
您可以想象這是一場足球比賽,而信號源正在發出幀[ 熱門觀察 ]。
假設是一個實時流場景 ..在delay(3 seconds)
情況下,打開頻道后,您將被訂閱,但會在實際發射3秒后收到第一幀,因此您將繼續觀看游戲延遲3秒。
在delaySubscription(3 seconds)
情況下,一旦打開頻道,您將等待3秒(丟失這3秒鍾內發射的任何幀),然后訂閱並開始實時接收其余幀
delaySubscription
僅影響初始訂閱。 訂閱下游的Observable
它會正常運行。
delay
對onNext
, onComplete
和onError
事件起作用,將onNext
延遲指定的時間,但保持它們之間的相對延遲相同。
如果您使用比Observable.just
少的可預測性的源,則差異將更加清楚
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.