i have next test case
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); } and output is
on value emitted 1454063289770 on value emitted 2 1454063289770 on value emitted 2 1454063289779 on value emitted 3 1454063289780 done 1454063289780 on value emitted 3 1454063289780 i can't figure out why on value emitted 2 , on value emitted 3 appears in log twice , why debounce delay doesn't work. can please help?
discussed here
to resolve duplicate items in log issue should use doonnext instead of dooneach, such dooneach include oncompleted events
take(1) completes observable immediately, why debounce doesn't work. delay should used instead of
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()));
Comments
Post a Comment