【问题标题】:Assign the result of combined observables before they are defined在定义组合的 observables 之前分配它们的结果
【发布时间】:2019-02-04 05:37:20
【问题描述】:

我有一个组件可以通过异步管道打印 observable 的值。

当组件初始化时,服务中的一个方法被调用,该方法异步地为一系列可观察对象赋值。 我需要该服务发出这些可观察值组合的结果,以便组件打印。

组件未收到通知。我认为问题在于,当模板被订阅时,我正在组合的 observables 尚未定义。有什么办法可以使这项工作?

Stackblitz

【问题讨论】:

  • 您的 stackblitz 链接无效。
  • 抱歉,现在应该修复了。
  • 首先,它在pipe 上失败,因为transformedValue$ 尚未定义。我再看看。只是发布我最初的想法
  • 你听说过主题吗?主题会在这里为您提供帮助。
  • @pixelbits 为什么主题更合适?

标签: angular rxjs observable


【解决方案1】:
  • 首先,要模拟 HTTP 调用,您需要使用 of() + delay()
  • 此外,您的组件是根组件,因此您永远不会在 @Input 字段中获得价值。
  • 主要问题是您需要组合init()initTransformedValue() 方法,因为如果您调用init(),它会在可观察对象(或未定义)上执行最新组合,稍后您将在initTransformedValue() 中重新分配,所以正确的顺序是1。调用 initTransformedValue(), 2. 调用 init(), 3. 使用 result$。 为了避免复杂性,最好将所有这些东西组合成 1 个方法 getTransformedValue(),该方法返回需要可观察的。

Stackblitz demo. 希望对您有所帮助。

【讨论】:

  • - 为什么?如果我只是想模拟分配不会是同步的 setTimeOut 也可以。 - 没错,我在 Stackblitz 中迷路了,忘记了 - 有道理
猜你喜欢
  • 2015-02-21
  • 2018-08-15
  • 2019-09-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多