如何在另一个可观察的Angular 7中返回可观察的方法

时间:2019-07-09 10:39:31

标签: angular rxjs observable angular7

在组件服务类中,使用angular7覆盖base-service get方法。如果需要映射数据,我想返回映射数据,否则返回原点数据。这是我的功能:

read(isSelectable:boolean): Observable<IFailureMode> {
  const observable = new Observable<IFailureMode>(subscriber => {
      if (isSelectable) {
        return super.read(filter).subscribe(data=>mapToSelectableModel(data));// Here want to return mapped data
      } else {
        return super.read(filter);//Here want to return origin data
      }
    });
  return observable;
}

如何将super.read(filter)返回为observable.next?有更有用的方法吗?

1 个答案:

答案 0 :(得分:2)

正确的答案

如果您只想根据提供的参数将映射应用于super.read,则应这样做:

read(isSelectable) {
  return super.read(filter)
    .pipe(map(data => isSelectable ? mapToSelectableModel(data) : data));
}

原始答案(错误)

如果我正确理解了您的问题,这将是您的一种解决方法:

read(fitler) {
  return of(filter)
    .pipe(
      map(f => {
        if (f.key === 'isSelectable' && f.value === 'true') {
          return super.read(f).pipe(map(data => mapToSelectableModel(data));
        } else {
          return super.read(f);
        }
      })
    );
}

在这种情况下,super调用将有条件地映射