给出一个可观察变量数组,其中每个可观察变量都可以发出EMPTY,我如何在前一个可观察变量返回EMPTY的情况下在该数组中执行下一个可观察变量,或者停止迭代该数组,并在该对象中的一个可观察变量返回一个非EMPTY值数组发出了第一个非EMPTY值?
答案 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
将无法完成其工作。