RxJs: ConcatMap VS ConcatMapTo, MergeMap VS MergeMapTo - PullRequest
0 голосов
/ 10 ноября 2018

Документация недостаточно полезна для меня, чтобы понять разницу между ними.

Это похоже на concatMap, но каждое значение всегда отображается на один и тот же внутренний Наблюдаемое. http://reactivex.io/rxjs/file/es6/operators/concatMapTo.js.html

Я пытался проверить примеры learnrxjs.io на stackblitz, но даже с этими, я не смог сразу определить, что отличительная особенность разделяла их.

К вашему сведению, я видел другой подобный вопрос В чем разница между mergeMap и mergeMapTo? но ответ там был неудовлетворительным, потому что в примерах Learnrxjs.io они четко отображают наблюдаемые, а не жестко закодированные значения. https://www.learnrxjs.io/operators/transformation/concatmapto.html

Если бы кто-то мог привести несколько примеров (и, возможно, краткое объяснение), чтобы помочь отличить наблюдаемые операторы *** от *** для наблюдаемых операторов более высокого порядка, я был бы признателен, спасибо.

1 Ответ

0 голосов
/ 10 ноября 2018

Проще говоря, варианты с *To всегда будут использовать один и тот же Observable, который необходимо создать при создании всей цепочки, независимо от значений, излучаемых цепочкой. Они принимают Наблюдаемый в качестве параметра.

Варианты без *To могут создавать и возвращать любые Наблюдаемые только тогда, когда их исходная Наблюдаемая излучает. Они принимают callback в качестве параметра.

Например, когда я использую mergeMapTo, я всегда подписываюсь на одну и ту же наблюдаемую:

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

Каждое излучение от source всегда будет отображаться на of(1), и я никак не могу это изменить.

С другой стороны, просто mergeMap Я могу вернуть любую наблюдаемую информацию, какую захочу, в зависимости от полученного значения:

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

Возможно, более простой способ подумать об этом - помнить, что *To варианты отображают значение на константу (даже если это не «настоящая константа JavaScript»).

...