我已从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
。
这些是我的导入: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
。
答案 0 :(得分:7)
作为switchMap
的第二个参数给出的resultSelector函数是deprecated。您需要使用map
运算符删除此内容并实现目标。
这里最棘手的部分是决定放置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;
})
);
}
)
)
答案 1 :(得分:0)
对于那些像我一样不了解为什么我不能使用这些重载的人:
仍然可以使用带有resultSelector
的重载,但是弃用是未来更改的警告,因此,可以在下一版RxJS中将其删除。
请像上面一样使用运算符map
。