每次展开发生的MergeMap

时间:2017-08-15 22:44:43

标签: rxjs

我想创建一个Observable链,它可以在下一个http之前添加expand个数据,但我无法弄清楚如何。< / p>

实际测试:

Observable.of('')
          .expand(n => n.length < 15 ? Observable.of(n + 'e') : Observable.empty())
          .mergeMap(n => Observable.of(n + 'm'))
          .subscribe(v => console.log(v));

输出:

m
em
eem
eeem
eeeem
eeeeem

预期产出:

em
emem
ememem

这样做的目的是使用expand请求为每个http电话添加信息。

1 个答案:

答案 0 :(得分:1)

传递给expand的函数接收expand发出的值。它没有收到整个链发出的值。

因此,如果您希望将附加信息(m)包含在传递给所述函数的值中,则mergeMap必须在expand内组成:

Rx.Observable.of('').expand(n => n.length < 15 ?
    Rx.Observable.of(n + 'e').mergeMap(n => Rx.Observable.of(n + 'm')) :
    Rx.Observable.empty()
)
.subscribe(v => console.log(v));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>