【发布时间】:2020-07-02 14:12:53
【问题描述】:
给定一个 observable 数组,其中每个 observable 都可以发出 EMPTY,我如何在前一个 observable 返回 EMPTY 或停止迭代数组并在数组发出了第一个非 EMPTY 值?
【问题讨论】:
标签: rxjs
给定一个 observable 数组,其中每个 observable 都可以发出 EMPTY,我如何在前一个 observable 返回 EMPTY 或停止迭代数组并在数组发出了第一个非 EMPTY 值?
【问题讨论】:
标签: rxjs
这是一种方法:
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 将无法完成其工作。
【讨论】: