RxJs:ConcatMap VS ConcatMapTo,MergeMap VS MergeMapTo

时间:2018-11-10 14:48:36

标签: rxjs rxjs6

文档不足以帮助我理解它们之间的区别。

  

就像concatMap,但始终将每个值映射到相同的内部   可观察的。   http://reactivex.io/rxjs/file/es6/operators/concatMapTo.js.html

我尝试查看关于stackblitz的Learnrxjs.io的示例,但是即使有了这些示例,我也无法立即识别出区分这些特征的区别。

仅供参考,我看到了另一个类似的问题 What is the difference between mergeMap and mergeMapTo? 但是那里的答案并不令人满意,因为在learnerxjs.io示例中,它们显然映射到可观察对象,而不是硬编码值。 https://www.learnrxjs.io/operators/transformation/concatmapto.html

如果有人可以提供一些示例(也许是简短的解释)来帮助区分***与***,以区分高阶可观察算子,谢谢,谢谢。

1 个答案:

答案 0 :(得分:4)

简而言之,具有 *To的变体将始终使用创建整个链时需要创建的相同Observable,而与链中发出的值无关。他们将 Observable 作为参数。

的变量*To仅在其源Observable发出时才能创建和返回任何Observable。他们将回调作为参数。

例如,当我使用mergeMapTo时,我总是订阅相同的Observable:

source.pipe(
  mergeMapTo(of(1)),
)

source的每个发射都将始终映射到of(1),我无法更改它。

另一方面,mergeMap可以根据接收到的值返回我想要的任何Observable:

source.pipe(
  mergeMap(v => of(v * 2)),
)

也许更容易想到这一点的方式是记住*To变体将值映射到常量(即使它不是“真正的JavaScript常量”)。