首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角9从可观测的角度返回

角9从可观测的角度返回
EN

Stack Overflow用户
提问于 2021-07-15 15:30:18
回答 2查看 1.5K关注 0票数 0

我正在寻找一种从另一个可观察到的返回一个可观察的方法。我发现您可以使用pipemap操作符来实现这一点,但它似乎不适合我。我做错什么了?

我使用角9.1.12rxjs ~6.5.4

示例: Service1

代码语言:javascript
复制
import { Observable, of } from 'rxjs';

export class Service1 {

  test(): Observable<string> {
      console.log(1);
      return of('hey');
  }
}

Service2

代码语言:javascript
复制
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

export class Service2 {

  constructor(private service1: Service1) {}

  test(): Observable<string> {
    return this.service1.test().pipe(
      map((value: string) => {
        console.log(2);
        return value;
      })
    );
  }
}

组件

代码语言:javascript
复制
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

export class Component implements OnInit {

  constructor(private service2: Service2) {}

  test(): Observable<void> {
    return this.service2.test().pipe(
      map((value: string) => {
        console.log(3);
      }));
    }
  }
}

控制台将只输出1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-15 15:40:12

这是合理的,因为您从未订阅observables,因此它们从未实际发出或运行。

您应该像这样订阅组件。

代码语言:javascript
复制
this.test().subscribe();

我创建了一个stackblitz来玩。

PS:请注意,当需要时,您也必须取消订阅。如果您不熟悉这些概念,我建议您阅读https://netbasal.com/when-to-unsubscribe-in-angular-d61c6b21bad3文章。

票数 3
EN

Stack Overflow用户

发布于 2021-07-15 15:42:47

正如函数只在调用它们时在内部运行代码一样,Observables只在订阅它们时才运行它们的代码。

您看到1输出是因为您调用了this.service1.test()

您看不到23,因为您从未订阅过这些Observables

代码语言:javascript
复制
export class Component implements OnInit {

  constructor(private service2: Service2) {}

  test(): void {
    this.service2.test().pipe(
      map(_ => console.log(3))
    ).subscribe();
  }
  
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68396687

复制
相关文章

相似问题

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