根据条件顺序执行可观察对象数组

时间:2020-07-02 14:12:53

标签: rxjs

给出一个可观察变量数组,其中每个可观察变量都可以发出EMPTY,我如何在前一个可观察变量返回EMPTY的情况下在该数组中执行下一个可观察变量,或者停止迭代该数组,并在该对象中的一个可观察变量返回一个非EMPTY值数组发出了第一个非EMPTY值?

1 个答案:

答案 0 :(得分: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)将确保我们保持 iterating ,直到获得非空值为止。

使用first(),我们将停止迭代,并获得发出的值。

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

相关问题