Ludzie mają tendencję do nadmiernego komplikowania rzeczy , podając definicję, która mówi:
flatMap przekształca elementy emitowane przez Observable w Observable, a następnie spłaszcza emisje z tych do jednego Observable
Przysięgam, że ta definicja wciąż mnie dezorientuje, ale wyjaśnię to w najprostszy sposób, czyli na przykładzie
Nasza sytuacja : mamy obserwowalną, która zwraca dane (prosty adres URL), których zamierzamy użyć do wykonania wywołania HTTP, które zwróci obserwowalne zawierające potrzebne nam dane, abyś mógł zwizualizować sytuację w następujący sposób:
Observable 1
|_
Make Http Call Using Observable 1 Data (returns Observable_2)
|_
The Data We Need
więc jak widać, nie możemy bezpośrednio dotrzeć do potrzebnych nam danych, więc pierwszym sposobem na odzyskanie danych możemy użyć zwykłych subskrypcji, takich jak ta:
Observable_1.subscribe((URL) => {
Http.get(URL).subscribe((Data_We_Need) => {
console.log(Data_We_Need);
});
});
to działa, ale jak widać, musimy zagnieżdżać subskrypcje, aby uzyskać nasze dane, obecnie nie wygląda to źle, ale wyobraź sobie, że mamy 10 zagnieżdżonych subskrypcji, które stałyby się nie do utrzymania.
więc lepszym sposobem rozwiązania tego problemu jest użycie operatora, flatMap
który zrobi to samo, ale pozwoli nam uniknąć tej zagnieżdżonej subskrypcji:
Observable_1
.flatMap(URL => Http.get(URL))
.subscribe(Data_We_Need => console.log(Data_We_Need));