【问题标题】:How do I get a value from an observable in without using subscribe? [duplicate]如何在不使用订阅的情况下从可观察到的值中获取值? [复制]
【发布时间】:2020-11-06 21:20:12
【问题描述】:

目前我有这个工作

let cognitoUser: CognitoUser;
        this.userService.cognitoUser.subscribe(
          r => {
            cognitoUser = r;
          }
        );

是否有像 const cognitoUser = .... 这样的单行代码。

谢谢

【问题讨论】:

  • 没有一个像这样的班轮。 Observables 通常是异步的,因此您必须考虑获取值的异步性质。请更详细地描述您的问题/用例。

标签: angular observable


【解决方案1】:

您可以使用async 管道。

此外,如果您只需要从 observable 返回的对象中选择一个字段,您可以使用 pluck 运算符。

您有一长串运算符来定义逻辑,而无需订阅 observable,将作业留给异步管道。另一个有用的管道运算符可能是map 或任何其他过滤管道。

Pluck/map 将处理 observable 发出的对象转换,并将在管道的另一端返回其值,async 将允许您不在代码中订阅,而是保留 observable 以便标记在需要时进行订阅.

它不会像你想要的那么短,但总比没有好:

x.component.ts:

public observable$ = this.userService.cognitoUser;

x.component.html:

{{ observable$ | async }}

【讨论】:

  • 如果我想在 ts 和 html 文件中像 cognitoUser.attributes.email 一样使用它怎么办?谢谢
【解决方案2】:

您的cognitoUserObservable 还是BehaviourSubjectBehaviourSubject 可以返回 this.userService.cognitoUser.value(),这意味着您的 BehaviourSubject 的最后一个值。

【讨论】:

  • 我得到:属性 'value' 在类型 'Observable' 上不存在。谢谢
  • 使用订阅时需要使用订阅或异步管道
猜你喜欢
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
相关资源
最近更新 更多