首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型'Subscription‘缺少以下属性

类型'Subscription‘缺少以下属性
EN

Stack Overflow用户
提问于 2019-10-08 14:54:47
回答 2查看 17.3K关注 0票数 5

当我写这段代码时,IDE显示错误。

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

组件:

代码语言:javascript
复制
ngOnInit() {
    const token = "abc";
    this.service.getContactPersons(token).subscribe(
      persons => this.contactPersons = persons
    );

  }

服务:

代码语言:javascript
复制
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);
}

我得到了这样的错误:“类型'Subscription‘缺少’Observable‘类型的以下属性:_isScalar、source、operator、lift以及更多。”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-08 15:14:53

subscribe不是then的rxjs等效项。具体地说,有了promises,你可以做somePromise.then(doSomething).then(doSomethingElse),但不能做someRxjsStream$.subscribe(doSomething).subscribe(doSomethingElse)。如果想要转换数据流,应该使用几个可用的rxjs操作符之一,在本例中是map

代码语言:javascript
复制
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));
}
票数 5
EN

Stack Overflow用户

发布于 2019-10-08 14:57:34

您的函数getContactPersons返回一个订阅,就像现在一样。只需删除函数的.subscribe((data: Properties) => data.contactPersons);部分,它就可以做到这一点。

由于您将返回一个可观察对象,因此您应该始终尝试仅传递可观察对象本身或在pipe()中对其执行操作,并且只订阅一次,因为多个订阅可能会失控并导致内存泄漏,从而导致用户的性能损失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58281451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档