Orang cenderung memperumit banyak hal dengan memberikan definisi yang mengatakan:
flatMap mengubah item yang dipancarkan oleh Observable menjadi Observable, lalu meratakan emisi tersebut menjadi satu Observable
Saya bersumpah definisi ini masih membingungkan saya tetapi saya akan menjelaskannya dengan cara yang paling sederhana yaitu dengan menggunakan contoh
Situasi Kami : kami memiliki sebuah observable yang mengembalikan data (URL sederhana) yang akan kami gunakan untuk membuat panggilan HTTP yang akan mengembalikan sebuah observable berisi data yang kami butuhkan sehingga Anda dapat memvisualisasikan situasi seperti ini:
Observable 1
|_
Make Http Call Using Observable 1 Data (returns Observable_2)
|_
The Data We Need
sehingga seperti yang Anda lihat, kami tidak dapat menjangkau data yang kami butuhkan secara langsung sehingga cara pertama untuk mengambil data kami dapat menggunakan langganan biasa seperti ini:
Observable_1.subscribe((URL) => {
Http.get(URL).subscribe((Data_We_Need) => {
console.log(Data_We_Need);
});
});
ini berfungsi tetapi seperti yang Anda lihat, kami harus menumpuk langganan untuk mendapatkan data kami, saat ini ini tidak terlihat buruk, tetapi bayangkan kami memiliki 10 langganan bersarang yang akan menjadi tidak dapat dikelola.
jadi cara yang lebih baik untuk menangani ini adalah dengan menggunakan operator flatMap
yang akan melakukan hal yang sama tetapi membuat kita menghindari langganan bersarang itu:
Observable_1
.flatMap(URL => Http.get(URL))
.subscribe(Data_We_Need => console.log(Data_We_Need));