RxJS - объединить сопоставленные элементы в поток - PullRequest
0 голосов
/ 10 мая 2018

Есть ли оператор, который позволяет мне отображать элементы потока, но вместо того, чтобы преобразовывать их, объединять их?

У меня есть поток

A => B => C

items$.concatMap(x => f(x)) приведет к

"f (A)" => "f (B)" => "f (C)"

в то время как concat не получает элемент в качестве параметра, так что он тоже не будет работать

Я хочу достичь:

"A" => "B" => "C" => "f (A)" => f (B) => "f (C)"

Это будет сделано, но я должен досадно разбить и сохранить свой поток (я думаю, это хорошо для небольшого примера, но на более длинном конвейере это более хлопотно).

item$ = Observable.of("A","B","C");

item$.concat(item$.map(x => f(x)));

1 Ответ

0 голосов
/ 11 мая 2018

Я наконец-то нашел подходящий для этого оператор (на момент написания я не смог найти его в RxJS 5 документах ), но он называется let и дает вам весь текущий наблюдаемыйв качестве аргумента.

item$.let(obs$ => obs$.concat(obs$.map(f));

Что не очень впечатляет, если это первая операция, это действительно полезно, но у вас может быть больше материала впереди и вы хотите избежать остановки и сохранения потока в локальной переменной:

item$.debounce(1000)
     .map(z => f(z.id))
     .moreOperators(...)
     .let(obs$ => obs$.concat(obs$.map(f));
...