【问题标题】:Execute array of observables in sequence based on condition根据条件按顺序执行可观察对象数组
【发布时间】:2020-07-02 14:12:53
【问题描述】:

给定一个 observable 数组,其中每个 observable 都可以发出 EMPTY,我如何在前一个 observable 返回 EMPTY 或停止迭代数组并在数组发出了第一个非 EMPTY 值?

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    这是一种方法:

    const emptyVal = Symbol('empty');
    
    const src$ = concat(
        ...arrOfObservable.map(
          obs$ => obs$.pipe(
            last(null, emptyVal)
          )
        )
      ).pipe(
        filter(v => v !== emptyVal),
        first()
      )
    

    last() 运算符将在源完成后发出最后一个发出的值。如果没有最后一个值obs$ 使用了EMPTY),它将发出emptyVal

    filter(v => v !== emptyVal) 将确保我们保持迭代,直到我们得到一个非空值。

    使用first(),我们会停止迭代,然后我们会得到发出的值。

    注意:如果obs$ 在某个时间完成,则此方法有效,否则last 将无法完成其工作。

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 2018-05-28
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      相关资源
      最近更新 更多