ผู้คนมักจะทำสิ่งต่างๆให้ยุ่งยากโดยการให้คำจำกัดความว่า:
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));