【发布时间】:2018-09-03 16:35:43
【问题描述】:
我正在尝试了解 delay 和 delaySubscription 运算符之间的区别。
This documentation 描述 delay 运算符:
Delay 操作符通过暂停一个 在发射每个之前的特定时间增量(您指定) 源 Observable 的项目。这具有转移 Observable 发出的整个项目序列在时间上向前 那个指定的增量
delaySubscription 是这样描述的:
还有一个运营商可以延迟订阅 源 Observable:delaySubscription。
但是,当我测试这两个运算符的行为时,在我看来它们的工作方式相同。
这是我的观察:
Observable observable = Observable.just(5, 3, 4, 2);
这里我使用 delay 运算符:
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");
}
};
这里 Observer 订阅了 Observable:
observable.subscribe(observer);
结果,当我使用 delay 运算符时,我得到以下日志:
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 对其进行测试 - 行为相同。
按照我的理解和顾名思义,delaySubscription 操作员不应该以这种方式工作:
[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
也许我做错了什么 - 但我无法理解其中的区别。你能解释一下延迟和延迟订阅的区别吗?
【问题讨论】: