web-dev-qa-db-fra.com

RxJS 6 switchMap Symbole obsolète utilisé

J'ai mis à jour de Angular 5 à Angular 6. J'essaie maintenant de mettre à jour mon code pour le rendre compatible avec 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;
  })
)

Je reçois un avertissement sur l'utilisation de switchMap que Deprecated Symbol is used.

Ce sont mes importations: import {map, switchMap} from 'rxjs/operators';

Existe-t-il un autre moyen d'utiliser switchMap dans la v6? De plus, si je ne change pas mon code, le rxjs-compat devrait faire fonctionner mon code existant (que j'ai installé) mais j'obtiens l'erreur suivante avec le même code mais dans le style 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.

7
Subhan

La fonction resultSelector donnée en tant que deuxième argument de switchMap est deprecated . Vous devez supprimer cela et atteindre l'objectif à l'aide de l'opérateur map.

La partie la plus délicate ici consiste à décider où placer l'opérateur map. En réalité, l’opérateur de carte doit entrer dans le corps de la fonction fournie comme argument de switchMap

Le code sans la fonction de sélection de résultat ressemblera à ceci:

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

            );
          }     
         )
        )
7
siva636
.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
Eduardo