Menschen neigen dazu, Dinge zu komplizieren, indem sie die Definition geben, die besagt:
flatMap wandelt die von einem Observable emittierten Elemente in Observables um und reduziert dann die Emissionen von diesen in ein einzelnes Observable
Ich schwöre, diese Definition verwirrt mich immer noch, aber ich werde sie auf einfachste Weise anhand eines Beispiels erklären
Unsere Situation : Wir haben ein Observable, das Daten zurückgibt (einfache URL), die wir verwenden werden, um einen HTTP-Aufruf durchzuführen, der ein Observable zurückgibt, das die benötigten Daten enthält, damit Sie die Situation wie folgt visualisieren können:
Observable 1
|_
Make Http Call Using Observable 1 Data (returns Observable_2)
|_
The Data We Need
Wie Sie sehen, können wir die benötigten Daten nicht direkt erreichen. Als erste Möglichkeit, die Daten abzurufen, können wir nur normale Abonnements wie diese verwenden:
Observable_1.subscribe((URL) => {
Http.get(URL).subscribe((Data_We_Need) => {
console.log(Data_We_Need);
});
});
Dies funktioniert, aber wie Sie sehen, müssen wir Abonnements verschachteln, um unsere Daten zu erhalten. Dies sieht derzeit nicht schlecht aus. Stellen Sie sich jedoch vor, wir haben 10 verschachtelte Abonnements, die nicht mehr gewartet werden können.
Ein besserer Weg, dies zu handhaben, besteht darin, nur den Operator zu verwenden, der flatMap
das Gleiche tut, aber dieses verschachtelte Abonnement vermeidet:
Observable_1
.flatMap(URL => Http.get(URL))
.subscribe(Data_We_Need => console.log(Data_We_Need));