Angular 5 Подпишитесь на Observable внутри SwitchMap

Я пытаюсь подписаться на внутренний 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, мое приложение не отражает изменений, происходящих в коллекции бронирований.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
641
2

Ответы 2

Чтобы получить изменения для Bookings, bookingService.findByProperyId() должен возвращать наблюдаемые значения всякий раз, когда (т.е. он может возвращать несколько значений в течение определенного периода времени), когда происходит изменение.

Я возвращаю snapShotChanges() в этом методе.

Subhan 20.05.2018 06:29

Вы можете попробовать что-то вроде этого:

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);
    });

Теперь у вас есть как работа, так и бронирования в методе подписки

Другие вопросы по теме