RxJS - 将映射元素连接到流中

RxJS - concatenate mapped elements onto a stream

是否有一个运算符允许我映射流的元素而不是转换它们,而是连接它们?

我有一个流

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)));

我终于找到了正确的运算符(在撰写本文时我无法在 RxJS 5 docs 中找到它),但它被称为 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));