Я хочу обрабатывать список наблюдаемых одновременно, используя 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
;