RxJs:ConcatMap VS ConcatMapTo,MergeMap VS MergeMapTo

RxJs: ConcatMap VS ConcatMapTo, MergeMap VS MergeMapTo

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

It's like concatMap, but maps each value always to the same inner Observable. http://reactivex.io/rxjs/file/es6/operators/concatMapTo.js.html

我尝试查看 learnrxjs.io 在 stackblitz 上的示例,但即使有了这些,我也无法立即确定将它们分开的区别特征。

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

如果有人可以提供一些例子(也许还有一个简短的解释)来帮助区分 *** 和 *** 对于高阶可观察运算符,我将不胜感激,谢谢。

简单地说,变体 with *To 将始终使用创建整个链时需要创建的相同 Observable,而不管链发出的值如何.他们将 Observable 作为参数。

变体 没有 *To 可以创建并且 return 只有当它们的源 Observable 发出时才可以创建任何 Observable。他们将 回调 作为参数。

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

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

来自 source 的每一次排放都将始终映射到 of(1),我无法更改它。

另一方面,仅 mergeMap 我可以 return 任何我想要的 Observable,具体取决于接收到的值:

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

也许更简单的思考方式是记住 *To 变体将值映射到常量(即使它不是 "real JavaScript constant")。