Rx: Как отменить звонок? - PullRequest
0 голосов
/ 27 марта 2019

Например, у нас есть вызов:

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

В этом коде я имею в виду, что мы не должны запускать наблюдаемый, если текущая минута нечетна.И запустите его, если текущая минута четна.

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Да, вы можете использовать filter для достижения этой цели. Итак, что происходит при использовании фильтра, если условие не удовлетворяется, поток ниже не выполняется.

В вашем случае (или примере), если текущая минута нечетная, метод подписки вызываться не будет. Однако, если он четный, поток будет работать так, как он написан.

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 голосов
/ 27 марта 2019

Назначьте его на одноразовое устройство и утилизируйте перед началом другого вызова или там, где вам нужно утилизировать

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));
}
...