Я пытаюсь подписаться на внутренний Observable. Вот что я делаю:
getDates() {
if (this.booking.id) {
this.jobService.findById(this.booking.id)
.map(job => job[0])
.switchMap((job) => {
return job ? this.bookingService.findByPropertyId(job.property.id) : Observable.empty();
}, (job: Job, bookings: Booking[]) => {
this.mark_jobs_unavailable(job, bookings);
return job;
})
.subscribe(job => {
this.bookingJob = job;
});
}
}
Мой код работает нормально, единственное, чего я пытаюсь достичь, - это также подписаться на изменения моих бронирований. В настоящее время, поскольку я не уверен, где мне подписаться на Observable, который я получаю от bookingService.findByPropertyId, мое приложение не отражает изменений, происходящих в коллекции бронирований.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы получить изменения для Bookings, bookingService.findByProperyId() должен возвращать наблюдаемые значения всякий раз, когда (т.е. он может возвращать несколько значений в течение определенного периода времени), когда происходит изменение.
Вы можете попробовать что-то вроде этого:
this.jobService.findById(this.booking.id)
.mergeAll() // or .mergeAll().first()
.switchMap(
job => this.bookingService.findByPropertyId(job.property.id),
(job, bookings) => [job, bookings]
)
.subscribe(([job, bookings]) => {
this.bookingJob = job;
this.mark_jobs_unavailable(job, bookings);
});
Теперь у вас есть как работа, так и бронирования в методе подписки
Я возвращаю
snapShotChanges()в этом методе.