Rx java 采取和解除使用问题
我有下一个测试用例Rx java 采取和解除使用问题,rx-java,Rx Java,我有下一个测试用例 public void testLimitAndPublishSubject() throws InterruptedException { PublishSubject<Boolean> mBooleanPublishSubject = PublishSubject.create(); mBooleanPublishSubject.asObservable() .doOnEach(__ -> System.out.p
public void testLimitAndPublishSubject() throws InterruptedException {
PublishSubject<Boolean> mBooleanPublishSubject = PublishSubject.create();
mBooleanPublishSubject.asObservable()
.doOnEach(__ -> System.out.println("on value emitted "+System.currentTimeMillis()))
.take(1)
.doOnEach(__ -> System.out.println("on value emitted 2 "+System.currentTimeMillis()))
.debounce(1000, TimeUnit.MILLISECONDS)
.doOnEach(__ -> System.out.println("on value emitted 3 "+System.currentTimeMillis()))
.subscribe(__ -> System.out.println("done "+System.currentTimeMillis()));
mBooleanPublishSubject.onNext(true);
Thread.sleep(1000);
mBooleanPublishSubject.onNext(true);
Thread.sleep(2000);
}
我不明白为什么发出的值2上的和发出的值3上的会在日志中出现两次,以及为什么去盎司延迟不起作用。有人能帮忙吗?
要解决日志问题中的重复项,我应该使用doOnNext
而不是doOnEach
,例如doOnEach includeonCompleted
事件
take(1)
立即完成observable,这就是为什么debounce不起作用。应该使用延迟,而不是
mBooleanPublishSubject.asObservable()
.doOnNext(__ -> System.out.println("on value emitted " + System.currentTimeMillis()))
.take(1)
.doOnNext(__ -> System.out.println("on value emitted 2 " + System.currentTimeMillis()))
.delay(1, TimeUnit.SECONDS)
.doOnNext(__ -> System.out.println("on value emitted 3 " + System.currentTimeMillis()))
.subscribe(__ -> System.out.println("done " + System.currentTimeMillis()));
mBooleanPublishSubject.asObservable()
.doOnNext(__ -> System.out.println("on value emitted " + System.currentTimeMillis()))
.take(1)
.doOnNext(__ -> System.out.println("on value emitted 2 " + System.currentTimeMillis()))
.delay(1, TimeUnit.SECONDS)
.doOnNext(__ -> System.out.println("on value emitted 3 " + System.currentTimeMillis()))
.subscribe(__ -> System.out.println("done " + System.currentTimeMillis()));