【问题标题】:can I get an observable value synchronically? (Angular/ReactiveX)我可以同步获得一个可观察的值吗? (角度/ReactiveX)
【发布时间】:2016-06-08 09:47:35
【问题描述】:

我的项目中有一个 boolean observable,名为 isPossible,它是这样声明的:

  isPossible: Observable<boolean>;

我想添加条件 isPossibletrue,但我想将它添加到同步评估其他条件的地方,我知道如何使用 observable 值的唯一方法是使用异步管道...就像{{isPossible | async}},但在这里我需要同步获取它...我该怎么做?

【问题讨论】:

    标签: angularjs angular reactivex


    【解决方案1】:

    将 Observable 视为一种 Promise,它可以随着时间的推移返回多个值。在这种情况下,您正在创建发出布尔值的异步流。您可以对这些值做出反应的方式是将您的操作放在流的subscribe 上,然后您将获得真正的价值:

    isPossible.subscribe((latestIsPossibleValue: boolean) => {
      if (latestIsPossibleValue) {
        // do something on 'true'
      }
    })
    

    您能否详细介绍一下您的案例?

    【讨论】:

    • 我不会在订阅中使用if (latestIsPossibleValue),而是在订阅前使用.filter((latestIsPossibleValue: boolean) =&gt; latestIsPossibleValue)
    【解决方案2】:

    当你想要同步的时候不要放异步

    {{isPossible}}
    

    最终不让它成为 Observable,只是一个简单的布尔值

    【讨论】:

    • 对于其他使用它的地方来说,它必须是可观察的,只是在这种情况下,我想同步获取值
    【解决方案3】:

    你可以做isPossible.filter(e =&gt; e).subscribe((e) =&gt; { ... })

    在 Rx 中,您首先将 observables 转换为其他 observables,例如,在这种情况下,我们将产生 truefalse 的 isPossible observable 更改为仅在 true.filter(e =&gt; e) 上产生的 observable。

    接下来,您可以订阅 observable。 subscribe 激活可观察序列。订阅后,订阅中的代码将在每次产生值时执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多