RxJava: получить наблюдаемое в onComplete

#java #rx-java

#java #rx-java

Вопрос:

Возможно, здесь я что-то очень очевидное, но в onComplete() методе наблюдателя, как мне узнать, какая наблюдаемая вызвала onComplete?

Более подробно, скажем, у вас есть следующее:

 event.subscribe((e) -> {
},
(error) -> {
},
() -> {
// HERE - How do I tell what event source is completing?
}
  

Комментарии:

1. Опубликуйте некоторый пример кода, потому что я не понимаю вопроса. onComplete вызывается в той же цепочке, в которой вы создали наблюдаемое

2. @breakline добавил некоторые детали

3. Если я правильно понимаю: вы не можете. Однако я не понимаю, зачем вам это нужно. Вы можете сохранить саму подписку и ссылку на нее в OnCompleted. Что бы вы ни хотели сделать, вы должны включить это в саму цепочку, так как после OnCompleted ваш Observable в основном больше не существует.

4. Также вы можете сохранить наблюдаемое в переменной, очевидно, чтобы вы могли ссылаться на него

Ответ №1:

«событие» является наблюдаемым. Каждый элемент, передаваемый наблюдаемым, будет проходить через цепочку операторов. После того, как элемент прошел через операторы, он будет перенаправлен подписчику, что происходит в разделе «подписаться». Подписка обеспечивает две перегрузки. По одному для каждого выпуска потока (события) и второй для уведомления о том, что ‘event’-Observable (поток) завершен.

Давайте посмотрим на список, который будет преобразован в наблюдаемый. Если вы преобразуете массив в наблюдаемый с помощью:

 Observable<Integer> integerObservable = Observable.fromArray(1, 2, 3);
  

вы будете вызваны для каждого значения 1, 2, 3 onNext в подписке. Наблюдаемый будет «onComplete» после того, как 3 будет переведен в onNext. Просто посмотрите на реализацию на GitHub, чтобы увидеть, что происходит.

Возвращаясь к вашему вопросу: как мне определить, какой источник событий завершается? Это будет наблюдаемое «событие», потому что вы подписываетесь на него.

Комментарии:

1. Но как вы получаете ссылку на event объект внутри onComplete() метода (где event объект недоступен во включающей области лямбда)?

2. Что бы вы хотели сделать со ссылкой? Может быть, есть другой способ сделать это.