У меня есть два метода RxJava стиле:Как совместить два почти похожих метода RxJava?
void requestFirst() {
Observable
.combineLatest(
api.requestAPI1(),
api.requestAPI2(),
(result1, result2) -> result1)
.map(result -> processResult(result))
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(etc1())
.doOnSubscribe(etc2())
.subscribe(
result -> onComplete(result),
e -> onError(e));
}
void requestNext() {
api.requestAPI1()
.map(result -> processResult(result))
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(etc1())
.doOnSubscribe(etc2())
.subscribe(
result -> onComplete(result),
e -> onError(e));
}
два метода являются почти то же самое, за исключением combineLatest, и я хочу, чтобы объединить его для рефакторинга. Итак, я пишу следующий код:
void request(boolean isFirst) {
Observable
.combineLatest(
api.requestAPI1(),
(isFirst) ? api.requestAPI2() : Observable.empty(),
(result1, result2) -> result1)
.map(result -> processResult(result))
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(etc1())
.doOnSubscribe(etc2())
.subscribe(
result -> onComplete(result),
e -> onError(e));
}
Но я думаю, что второй параметр метода combineLatest не стиль Rx в. Как я могу объединить эти два похожих метода по стилю Rx? Спасибо.
Странное решение! Прежде всего: это выглядит не по «Rx Patterns». Secondary: в таком случае, как обрабатывать подписку, отписаться, когда это необходимо и т. Д.? –