RxJS 6 switchMap 弃用符号使用
RxJS 6 switchMap Deprecated Symbol used
我已经从 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
的第二个参数给出的 resultSelector 函数是 deprecated。您需要删除它并使用 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[]) => {
...
})
对于那些像我一样没有立即理解为什么我不能使用这些重载的人:
resultSelector
的重载仍然可以使用,但弃用是对未来更改的警告,因此,它们可以在下一版本的 RxJS 中删除。
像上面那样使用运算符 map
。
我已经从 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
.
作为 switchMap
的第二个参数给出的 resultSelector 函数是 deprecated。您需要删除它并使用 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[]) => {
...
})
对于那些像我一样没有立即理解为什么我不能使用这些重载的人:
resultSelector
的重载仍然可以使用,但弃用是对未来更改的警告,因此,它们可以在下一版本的 RxJS 中删除。
像上面那样使用运算符 map
。