Люди, як правило, надто ускладнюють речі , даючи визначення, яке говорить:
flatMap перетворює елементи, що випромінюються Observable, у Observables, а потім згладжують викиди від них в єдиний 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));