#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. Что бы вы хотели сделать со ссылкой? Может быть, есть другой способ сделать это.