#java #rx-java
#java #rx-java
Вопрос:
У меня есть следующий метод, который работает, как и ожидалось.
Но есть ли способ, которым я мог бы изменить его, чтобы мне не приходилось подписываться на вызов webclient отдельно
и вместо этого позволить ему быть частью потока и подписаться на него только один раз от какого-либо подписчика?
Обратите внимание, что в конечном итоге это должно возвращать наблюдаемое <целое число> .
Observable<Integer> observable = Observable.just(1)
.delay(5, TimeUnit.MILLISECONDS)
.compose(obs -> {
webClient.putAbs("url")
.rxSend()
.doOnSubscribe(() -> System.out.println("Subbing to client")) // to be removed with solution
.subscribe(); // I don't want to have to do a sub here.
return obs;
})
.doOnSubscribe(() -> System.out.println("the only single sub i want to have"));
Какой-нибудь внешний подписчик сделает следующее.
observable.subscribe()
;
Я бы хотел, чтобы это запускало общий поток, который также вызывал бы вызов webclient вместо отдельного вызова, как указано выше.
Возможно ли это?
Таким образом, ищите что-то вроде следующего, которое не подписывается на WebClient отдельно.
Пробовал через flatmap и compose и не смог этого достичь.
(Следующее синтаксически неверно. Это просто для того, чтобы примерно показать, что я ищу).
Observable<Integer> observable = Observable.just(1)
.delay(5, TimeUnit.MILLISECONDS)
.compose(obs -> webClient.putAbs(""))
.rxSend()
.toObservable();
Ценю любые рекомендации. Спасибо.
Ответ №1:
Это должно сработать:
Observable<Integer> observable = Observable.just(1)
.delay(5, TimeUnit.MILLISECONDS)
.flatMap(obs -> webClient.putAbs("url").rxSend().map(a -> obs));
.flatMap()
охотно подписывается на внутренний webClient
вызов.