我想使用flatMap
同时处理可观察物列表,然后在处理所有内部可观察物时发出一个空值。是否有一种优雅的方法可以实现这一点,即使用单个运算符?
这里是示例:
const { of, from } = Rx.Observable;
from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
.mergeMap(number => multiply(number), 2) // processing two numbers at a time
.last() // waiting for all inner observables to complete
.map(_ => undefined) // casting a value returned by last() to an empty value
.subscribe()
;
function multiply(number) {
return of(number * 2) // multiplying the number
.delay(200) // adding a slight delay
;
}
我知道我可以使用toArray()
或last()
等待所有内部可观对象完成,但是随后我将需要使用map()
运算符将其强制转换为空值(如上述示例中所示。)>
我猜,我正在寻找具有以下语义的运算符:emit X when source observable completes
,例如:
from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
.mergeMap(number => multiply(number), 2)
.emitOnComplete(undefined)
.subscribe(console.log) // we should get undefined here
;
我想使用flatMap同时处理可观察对象列表,然后在处理所有内部可观察对象时发出一个空值。是否有一种优雅的方法来实现这一目标,即使用...
到目前为止,我设法找到的最方便的方法是将ignoreElements运算符与endWith组合在一起:
实际上有一个使用reduce()
的偷偷摸摸的解决方案,当其源可观察到的源完成时,它仅发出一次。您可以使用它忽略所有值,而只返回种子值: