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
.
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;
})
);
}
)
)
.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[]) => {
...
})