文档不足以帮助我理解它们之间的区别。
就像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如果有人可以提供一些示例(也许是简短的解释)来帮助区分***与***,以区分高阶可观察算子,谢谢,谢谢。
答案 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常量”)。