类型“订阅”缺少以下属性

gen*_*nek 12 observable typescript angular

当我编写此代码时,IDE 显示错误。

我有一个组件调用 ngOnInit 中的服务来获取数据。服务调用其他服务来获取一些数据并使用它来获取数据然后返回它。

成分:

ngOnInit() {
    const token = "abc";
    this.service.getContactPersons(token).subscribe(
      persons => this.contactPersons = persons
    );

  }
Run Code Online (Sandbox Code Playgroud)

服务:

getContactPersons(token: string): Observable<ContactPerson[]> {
return this.tokenService.getParameters(token).pipe(
      switchMap((data: Params) => {
        return this.http.get<Properties>(
          this.baseUrl + `/abc/${data.param1}/properties/${data.param2}`
        );
      })
    ).subscribe((data: Properties) => data.contactPersons);
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:“‘订阅’类型缺少‘Observable’类型中的以下属性:_isScalar、源、运算符、提升以及其他 6 个属性。”

mbo*_*jko 10

subscribe不是 rxjs 的等价物then。具体来说,有了承诺,你可以做到somePromise.then(doSomething).then(doSomethingElse),但你不能做到someRxjsStream$.subscribe(doSomething).subscribe(doSomethingElse)。如果您想转换数据流,您应该使用几个可用的 rxjs 运算符之一,在您的情况下它是map

getContactPersons(token: string): Observable<ContactPerson[]> {
    return this.tokenService.getParameters(token).pipe(
        switchMap((data: Params) => this.http.get<Properties>(
            `${this.baseUrl}/abc/${data.param1}/properties/${data.param2}`)),
        map((data: Properties) => data.contactPersons));
}
Run Code Online (Sandbox Code Playgroud)