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;
})
)
Deprecated Symbol is used
というswitchMapの使用に関する警告が表示されます。
これらは私のインポートです:import {map, switchMap} from 'rxjs/operators';
V6でswitchMapを使用する別の方法はありますか?また、コードを変更しない場合、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
。
switchMap
の2番目の引数として指定されたresultSelector関数は 非推奨 です。これを削除し、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;
})
);
}
)
)
.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[]) => {
...
})