2016-08-29 8 views
1

Я хочу сделать простой запрос долго опроса с RxSwift, который может быть похож на RxJava код ниже:Long опрос с RxSwift

api.loadHotels(searchRequest) 
    .repeatWhen(obs -> observable.delay(3, TimeUnit.SECONDS)) 
    .takeUntil(searchResponse -> searchResponse.isCompleted) 
    .subscribe(listener::hotelListLoaded); 

В RxSwift, есть repeatWhen оператор, который принимает ObservableConvertibleType в качестве параметра , не передавая цепочку Observable ее закрытию в качестве аргумента, в отличие от своего синонима в RxJava.

Что я ожидал от RxSwift: api.loadHotels(searchRequest).repeatWhen{result -> ObservableConvertibleType}, поэтому я могу написать ту же логику, что и код RxJava. Но я не могу этого добиться. Потому что это только как api.loadHotels(searchRequest).repeatWhen(ObservableConvertibleType) То же самое относится и к оператору RxSwift takeUntil.

Однако я также пытался: repeatWhen operator in RxSwift и repeatWhen substituter in RxSwift

Так что мой вопрос: как я могу достичь того же логики в RxSwift как данный код RxJava? Я получаю рабочий поток текущих repeatWhen и takeUntil операторов RxSwift неправильно?

ответ

2

Как о чем-то вроде этого ?:

let hotelRequest = api.loadHotels(searchRequest) 

hotelRequest.repeatWhen { 
    return hotelRequest.flatMapLatest { result in 
     // now you have your chance to use `result -> ObservableConvertibleType` 
    } 
} 
+0

Это хорошее решение. Спасибо! –