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 include
onCompleted
事件

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()));