【发布时间】:2020-07-05 08:33:44
【问题描述】:
我想使用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
;
【问题讨论】: