rxjs 管道:Observable 类型的参数不可分配给参数

rxjs pipes: Argument of type Observable not assignable to parameter

我是 rxjs 和管道的新手 - 并且绞尽脑汁试图理解为什么我会收到此打字稿错误:"Argument of type Observable not assignable to parameter OperatorFunction"。有人可以给我解释一下吗?

目的是请求 "Hello",但在数据通过管道传输时将数据替换为 "Bye"。

  ngOnInit() {
    this.getHello()
      .pipe(this.getBye())
      .subscribe(data => console.log(data))
  }
  getHello() {
    return of("Hello")
  }
  getBye() {
    return of ("Bye")
  }
}

使用 map 作为 Pipeable Operator:

this.getHello()
  .pipe(map((data) => { return this.getBye() }))
  .subscribe(data => {
    console.log(data);
  });
getHello() {
  return of("Hello");
}
getBye() {
  return of("Bye");
}

详细检查管道运算符的链接: https://angular.io/guide/rx-library https://blog.hackages.io/rxjs-5-5-piping-all-the-things-9d469d1b3f44

pipe 方法接收一个 OperatorFunction,但你给它你的 getBye() 方法,returns 一个 Observable。您必须传递一个 OperatorFunction,例如 "map":

ngOnInit() {
  this.getHello()
    .pipe(map(_ => this.getBye()))
    .subscribe(data => console.log(data));
}

getHello(): Observable<string> {
  return of('Hello');
}

getBye(): string {
  return 'Bye';
}

创建自己的运算符时,必须将函数包装在函数中。将新事件设置到流上时调用内部函数。同时,您还可以访问流本身 (sourceStream)。

有关工作示例,请参阅 Stackblitz。

 ngOnInit() {
      this.getHello()
          .pipe(this.getBye())
          .subscribe(data => console.log(data))
      }

      getHello() {
        return of("Hello")
      }

      getBye() {
        return (sourceSteam: any) => of("Bye")
      }
    }

https://stackblitz.com/edit/ng-Whosebug-52413693?file=index.ts