RxJS 6 switchMap Не рекомендуется использовать символ - PullRequest
0 голосов
/ 23 мая 2018

Я обновил с Angular 5 до Angular 6.Сейчас я пытаюсь обновить свой код, чтобы сделать его совместимым с RxJS 6.

.pipe(
  map(job => job[0]),
  switchMap((job) => {
    return job ? this.bookingService.findByID(job.property.id) : Observable.empty();
  }, (job: Job, bookings: Booking[]) => {
    this.mark_jobs_unavailable(job, bookings);
    return job;
  })
)

Я получаю предупреждение об использовании switchMap о том, что Deprecated Symbol is used.

Это мой импорт: import {map, switchMap} from 'rxjs/operators';

Есть ли альтернативный способ использования switchMapв v6?Кроме того, если я не изменю свой код, rxjs-compat должен заставить мой существующий код работать (который я установил), но я получаю следующую ошибку с тем же кодом, но в стиле RxJS 5:

.map(job => job[0])
.switchMap((job) => {
    return job ? this.bookingService.findByID(job.property.id) : Observable.empty();
}, (job: Job, bookings: Booking[]) => {
    this.mark_jobs_unavailable(job, bookings);
    return job;
})

Error: Expected 1 argument but got 2.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018
.pipe(
  map(job => job[0]),
  switchMap((job) => {
    return job ? this.bookingService.findByID(job.property.id).pipe(
      map((bookings: Booking[]) => {
        return {
          job: job,
          bookings: bookings
        };
      })
    ) : Observable.empty();
  }
).subscribe((job, bookings: Booking[]) => {
  ...
})
0 голосов
/ 23 мая 2018

Функция resultSelector, заданная в качестве второго аргумента для switchMap, является устаревшей .Вы должны удалить это и достичь цели, используя оператор map.

Самая сложная задача - решить, куда поместить оператор map.На самом деле оператор отображения внутри тела функции предоставляется в качестве аргумента switchMap.

Код без функции выбора результата будет выглядеть примерно так:

     .pipe(
          map(job => job[0]),
          switchMap((job) => {
            return (job ? this.bookingService.findByID(job.property.id) : Observable.empty()).pipe(

              // This is the mapping function provided as the alternative to the deprecated result selector function
              // This should be placed inside the body of the function which is the 1st (and only one) argument of switchMap
              map((bookings: Booking[])=>{
              this.mark_jobs_unavailable(job, bookings);
              return job;
            })

            );
          }     
         )
        )
...