Люди склонны чрезмерно усложнять вещи , давая определение, которое гласит:
flatMap преобразует элементы, излучаемые Observable, в Observable, а затем сглаживает выбросы от них в один Observable
Клянусь, это определение до сих пор меня смущает, но я объясню его самым простым способом, используя пример
Наша ситуация : у нас есть наблюдаемый объект, который возвращает данные (простой 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));