RxJS 6 switchMap使用不推荐使用的符号

时间:2018-05-23 01:46:46

标签: angular rxjs angular5 angularfire2 angular6

我已从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

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