Rx:如何取消通话?

问题描述 投票:0回答:2

例如,我们有一个电话:

getObsevable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(::onSuccess, ::onError))

如果条件成立,有没有办法不启动它?例如:

getObsevable()
.stop({ Calendar.getInstance().get(Calendar.MINUTE) % 2 == 0 })
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(::onSuccess, ::onError))

在这段代码中,我的意思是如果当前分钟是奇数,我们不应该启动observable。如果当前分钟均匀,则启动它。

android rx-java
2个回答
1
投票

是的,您可以使用filter来实现这一目标。那么当使用过滤器时会发生什么,如果条件不满足,则下面的流不会被执行。

在您的情况(或示例)中,如果当前分钟为奇数,则不会调用subscribe方法。但是,如果它是偶数,则流将按照它的编写方式工作。

getObservable()
    .filter({ Calendar.getInstance().get(Calendar.MINUTE) % 2 == 0 })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(::onSuccess, ::onError))

你可以在这里阅读 - > http://reactivex.io/documentation/operators/filter.html


0
投票

将其分配给一次性用品,并在开始另一次通话之前将其丢弃,或者在需要处理它的任何地方进行处理

Disposable disposable;


public void createDisposableWithMyObservable(){
    if(disposable != null) disposable.dispose();

    disposable = getObsevable()
                   .stop({ Calendar.getInstance().get(Calendar.MINUTE) % 2 == 0 })
                   .subscribeOn(Schedulers.io())
                   .observeOn(AndroidSchedulers.mainThread())
                   .subscribe(::onSuccess, ::onError));
}
热门问题
推荐问题
最新问题