rxJava debounce运算符不使用Observable.range()

nho*_*ass 5 java android rx-java rx-android rx-java2

AFAIK debounce()是rxJava 的运营商,用于延迟事件的发射.当我在搜索框中应用它时,它正常工作:

RxTextView.textChangeEvents(editText)
                .debounce(1000, TimeUnit.MILLISECONDS) //Only emit after 1 sec
                .subscribe(new Observer<TextViewTextChangeEvent>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(TextViewTextChangeEvent event) {
                        //Get more information about text change event
                        Log.e(TAG, "Before: " + event.before() + ", start: " + event.start() + ", count: " + event.count());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {
                        Log.e(TAG, "textChangeEvents: onComplete");
                    }
                });
Run Code Online (Sandbox Code Playgroud)

但是当我Observable.range()像这样应用它时:

Observable.range(1, 10000)
                .debounce(1000, TimeUnit.MILLISECONDS)
                .subscribe(new Observer<Long>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onNext(@NonNull Long integer) {

                    }

                    @Override
                    public void onError(@NonNull Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
Run Code Online (Sandbox Code Playgroud)

onNext()尽管我已经应用了debounce(1000, TimeUnit.MILISECONDS)操作员,但排放仍然非常快(大约1000排放/秒)并且持续不断.

我希望的是:当我使用时,debounce()只有1个数字会在延迟1000毫秒后发出(它可以在延迟2个发射时跳过数字).意味着排放将像上面的搜索框示例一样逐个下游.

我是rx的新手请帮助我实现这个并解释原因?我真的不知道为什么我必须使用另一个操作员,但debounce()因为这个想法是一样的!

aka*_*okd 5

debounce通过定义事件之间必须经过的宽限期来防止下游不堪重负,以获得最后一个事件,换句话说,它将在一段时间后发出最新的元素。Range 将尽可能快地通过它的项目,因此项目之间没有足够的时间,并且只会发出最后一个。

debounce根本不是您的用例所需的运算符。2.x 的扩展项目具有适用于您的用例的spanout运算符。