Joe*_*mov 3 java rx-java rx-java2
我试图了解delay和delaySubscription运算符之间的区别。
本文档描述了延迟运算符:
延迟运算符通过在发出每个源Observable项目之前暂停特定的时间增量(由您指定)来修改其源Observable。这样的效果是将Observable发出的整个项目序列按时间向前移动指定的增量
delaySubscription的描述如下:
还有一个运算符,可用于延迟对源Observable的订阅:delaySubscription。
但是,当我测试这两个运算符的行为时,在我看来它们的工作方式相同。
这是我的观察:
Observable observable = Observable.just(5, 3, 4, 2);
Run Code Online (Sandbox Code Playgroud)
在这里我使用延迟运算符:
observable = observable.delay(3, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
这是我的观察者,它记录何时调用其方法之一
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");
}
};
Run Code Online (Sandbox Code Playgroud)
观察者在这里订阅了可观察者:
observable.subscribe(observer);
Run Code Online (Sandbox Code Playgroud)
结果,当我使用延迟运算符时,我得到以下日志:
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
Run Code Online (Sandbox Code Playgroud)
以及使用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
Run Code Online (Sandbox Code Playgroud)
正如您在日志中看到的那样,它们以相同的方式工作。我不明白他们之间的区别。我尝试使用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
Run Code Online (Sandbox Code Playgroud)
也许我做错了-但我无法理解其中的区别。您能否解释一下delay和delaySubscription之间的区别?
y.a*_*lam 10
您可以将其想象为橄榄球比赛的源流,并且信号源正在发射帧[ 热点可观察 ]。
假设是实时流场景。如果是delay(3 seconds),则打开频道后即可订阅,但在实际发射3秒后会收到第一帧,因此您将继续观看游戏,但要延迟3秒。
如果是delaySubscription(3 seconds),打开频道后,您将等待3秒(这3秒钟内缺少任何发射的帧),然后订阅并开始实时接收其余帧
delaySubscription仅影响初始订阅。在它订阅了下游之后,它会Observable像往常一样运行。
delay适用于onNext,onComplete和onError事件,将它们延迟指定的时间,但保持它们之间的相对延迟相同。
如果您使用可预测性较差的来源,则差异会更明显 Observable.just
| 归档时间: |
|
| 查看次数: |
3202 次 |
| 最近记录: |