RXJava отписаться от звонка подписки - PullRequest
0 голосов
/ 26 августа 2018

У меня есть приведенный ниже пример кода

val disposable = Observable.interval(interval, TimeUnit.SECONDS)
                .take((maxTimeForRequestInSecond / interval).toInt())
                .subscribe {
                    Manager.fetchAvailableSubscriptions(context, params) { status: WebService.Status, response: String? ->
                        if (status == WebService.Status.Success) {
                            // TODO stop the timer and dismiss observable!
                        }
                    }
                }

Как я могу отклонить Наблюдаемое при выполнении условия подписки, как у меня на TODO?(У меня нет доступа к disposable)

Примечание: Использование RxJava 1.1.6

1 Ответ

0 голосов
/ 26 августа 2018

Ваш поток несколько прерван, пожалуйста, укажите fetchAvailableSubscriptions как Observable<ResponseWithStatus>.Таким образом, у вас не будет обратного вызова в обратном вызове, и его будет проще реализовать с помощью оператора takeUntil

. Вы можете сделать это, поместив Manager.fetchAvailableSubscriptions в Observable.fromCallable или Observable.create

.Тогда ваш поток будет выглядеть более или менее как

Disposable disposable = Observable.interval(interval, TimeUnit.SECONDS)
                .take((int)(maxTimeForRequestInSecond / interval))
                .flatMap(__ -> fetchAvailableSubscriptionsObservable())
                .takeUntil(responseWithStatus -> status == WebService.Status.Success)
                .subscribe(responseWithStatus -> {
                         // use the response 
                 });
...