filter.mapTo运算符的RxJs 5-> RxJs 6

问题描述

我继承了一些旧的RxJs 5代码,闻起来很尴尬:

  myFunc = (tag: TagModel): Observable<TagModel> => {
    try {
      const foundTag = this.mappedTags.find((x) => {
        return x.name === tag;
      });
      const isAllowedToAdd = foundTag ? false : true;

      return Observable
        .of(tag)
        .filter(() => isAllowedToAdd)
        .mapTo(tag);

    } catch (err) {
      console.log("err: ",err);
    }
  }

代码的目的是创建带有标签值(如果找到)的Observable,否则为空吗?它看起来太复杂了(加上一些我无法在此处分享的选择词)。

RxJs引入了重大更改,其中ofmapTo不再可链接。这是重构的正确方法吗?

  return of(tag)
    .filter(() => isAllowedToAdd)
    .pipe(mapTo(tag));

解决方法

下面应该工作

  myFunc = (tag: TagModel): Observable<TagModel> => {
    try {
      const foundTag = this.mappedTags.find((x) => x.name === tag);
      const isAllowedToAdd = !foundTag;

      return of(tag).pipe(
        filter(() => isAllowedToAdd)
      )
    } catch (err) {
      console.log("err: ",err);
    }
  }

请记住包括import { of } from 'rxjs'import { filter } from 'rxjs/operators'