Angular 5在SwitchMap内部订阅一个Observable

时间:2018-05-20 02:56:19

标签: javascript rxjs angular5

我试图订阅内部的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;
      });

  }
}

我的代码工作正常,我唯一想要实现的是订阅我的预订的更改。目前,由于我不确定在哪里订阅我从bookingService.findByPropertyId获得的Observable,我的应用程序并不反映预订集合中发生的变化。

2 个答案:

答案 0 :(得分:0)

要获取预订的更改,bookingService.findByProperyId()必须随时返回可观察的值(即,它可以在一段时间内返回多个值)发生更改。

答案 1 :(得分:0)

您可以尝试这样的事情:

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

现在,您在订阅方法

中同时拥有工作和预订