【问题标题】:Angular - How to merge these two observables with ngrx some magics?Angular - 如何将这两个 observables 与 ngrx 合并一些魔法?
【发布时间】:2022-01-22 05:49:27
【问题描述】:

我有 2 个 observables。一个返回一个事件,另一个返回布尔值。我想创建一个新的 observable,它在商店中的值为 true 时返回布尔值或事件。这是代码。这个 obs1 应该等到 obs2 返回 true。

const obs1 = fromEvent(window,'beforeunload')
const obs2 = this.store.select(aBooleanObservable)

const result: Observable<boolean>= ???

senario 1 = 事件触发,存储中的值 true => 结果为 true
senario 2 = 事件触发,存储中的值 false => 结果注意到发出,直到值更改为 true

【问题讨论】:

  • 我猜你在这种情况下必须做一些工作,但我认为你可以试试concattakeuntil

标签: angular typescript ngrx store rxjs-observables


【解决方案1】:

我不确定这是否可行,以下答案假设 obs1 仅触发一次。你可以试试

const obs1 = fromEvent(window,'beforeunload')
const obs2 = this.store.select(aBooleanObservable)

const result: Observable<boolean>=  obs1
 .pipe(
   switchMap(()=> obs2 ),
   filter((aBooleanObservableRes)=>aBooleanObservableRes)
  
 )

只有当 obs2 具有“真”布尔值时才会返回您的结果。

【讨论】:

    【解决方案2】:
    const obs1 = fromEvent(window,'beforeunload')
    const obs2 = this.store.select(aBooleanObservable)
    
    const result: Observable<boolean>=  combineLatest(obs1, obs2).pipe(
    filter((event, obvBoolean) => event && obvBoolean));
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-07-19
    • 2017-01-21
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多