Людей, как правило, более усложнять, давая определение, которое говорит:
flatMap преобразование элементов, испускаемых наблюдаемым в наблюдаемые характеристиках, то сглаживать выбросы от тех, в едином Наблюдаемый
Клянусь этим определением, все еще меня смущает, но я собираюсь объяснить это самым простым способом который с помощью примера
Нашей ситуации: мы имеем наблюдаемый, который возвращает данные (простой URL), который мы будем использовать, чтобы сделать HTTP-вызов, который будет возвращать наблюдаемый, содержащий данные, которые нам нужно, чтобы вы могли визуализировать ситуацию так:
Observable 1
|_
Make Http Call Using Observable 1 Data (returns Observable_2)
|_
The Data We Need
так, как вы можете видеть, что мы не можем достичь данных, необходимые нам напрямую, поэтому первый способ извлечения данных мы можем использовать только нормальные подписки, как это:
Observable_1.subscribe((URL) => {
Http.get(URL).subscribe((Data_We_Need) => {
console.log(Data_We_Need);
});
});
это работает, но, как вы можете видеть, нам нужно вложить подписки, чтобы наши данные выглядели плохо, но представьте, что у нас есть 10 вложенных подписей, которые станут недоступными.
так лучший способ справиться с этим просто использовать оператор flatMap
, который будет делать то же самое, но заставляет нас избегать этого вложенную подписки:
Observable_1
.flatMap(URL => Http.get(URL))
.subscribe(Data_We_Need => console.log(Data_We_Need));
этот ответ велик из-за ценных ссылок, которые он предоставляет, но терминология rxjs не хорошо переводится на английский. (фотографии лучше). Вот почему я рекомендую вместо этого использовать простые примеры, подобные этому, или более сложные примеры в репозитории rxjs и добавление операторов «.do» до и после оператора flatmap и map, а затем просто установление точки останова с помощью отладчика Chrome. вы сразу увидите, что каждый из них производит другой вывод. – HipsterZipster
Я думаю, что если 'flatMap' был бы назван' mapThenFlatten', тогда он был бы менее запутанным. – goat