ใครช่วยอธิบายความแตกต่างระหว่าง Observable, Completable และ Single ใน RxJava พร้อมตัวอย่างที่ชัดเจนได้ไหม
ในสถานการณ์ใดที่เราใช้หนึ่งมากกว่าคนอื่น ๆ ?
ใครช่วยอธิบายความแตกต่างระหว่าง Observable, Completable และ Single ใน RxJava พร้อมตัวอย่างที่ชัดเจนได้ไหม
ในสถานการณ์ใดที่เราใช้หนึ่งมากกว่าคนอื่น ๆ ?
คำตอบ:
Observableเป็นหน่วยการสร้าง ReactiveX ทั่วไปของแหล่งเหตุการณ์ที่ปล่อยค่าเมื่อเวลาผ่านไป (และมีอยู่ในทุกภาษา ReactiveX ที่ขยายไปถึง)
ในเหตุการณ์ที่สังเกตได้สั้น ๆ คือ
onNext * (onCompleted | onError)? / (* ศูนย์หรือมากกว่า? - ศูนย์หรือ 1)
SingleและCompletableเป็นประเภทใหม่ที่เปิดตัวเฉพาะใน RxJava ซึ่งแสดงถึงประเภทที่ลดลงObservableซึ่งมี API ที่กระชับมากขึ้น
SingleแสดงObservableว่าปล่อยค่าเดียวหรือข้อผิดพลาด
CompletableแสดงObservableว่าไม่มีค่า แต่เฉพาะเหตุการณ์เทอร์มินัลonErrorหรือonCompleted
คุณสามารถนึกถึงความแตกต่างเช่นความแตกต่างของวิธีการที่ส่งกลับ:
คอลเลกชันของวัตถุ - สังเกตได้
วัตถุเดียว - Single
และวิธีการที่ไม่ส่งคืนค่า (วิธีโมฆะ) - เสร็จสมบูรณ์
Singleจะเหมาะสมเมื่อคุณมีงานเชิงสังเกตและคุณคาดหวังค่าเดียวเช่นคำขอเครือข่ายซึ่งดำเนินการครั้งเดียวและส่งคืนค่า (หรือข้อผิดพลาด) การโทรผ่านเครือข่ายจะดำเนินการในครั้งเดียวซึ่งหมายความว่าคุณไม่คาดหวังว่าจะส่งคืนค่าเพิ่มเติม ล่วงเวลา. อีกตัวอย่างหนึ่งคือการดำเนินการดึงข้อมูลฐานข้อมูล
Completableเหมาะสมเมื่อคุณมีObservableและคุณไม่สนใจเกี่ยวกับมูลค่าที่เกิดจากการดำเนินการหรือไม่มีเลย ตัวอย่างกำลังอัปเดตแคชเช่นการดำเนินการสามารถทำได้สำเร็จ / ล้มเหลว แต่ไม่มีค่า
อีกตัวอย่างหนึ่งคือการดำเนินการ init ที่รันเป็นเวลานานซึ่งไม่ส่งคืนอะไรเลย อาจเป็นการโทรผ่านเครือข่าย UPDATE / PUT ที่มีตัวบ่งชี้ความสำเร็จเท่านั้น
ไม่ว่าในกรณีใด Completable และ Single ไม่ได้เพิ่มความสามารถใหม่ ๆ แต่กำลังแนะนำ API ที่แข็งแกร่งและรัดกุมมากขึ้นซึ่งจะบอกข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการเบื้องหลัง Observable ที่ API เปิดเผย
แก้ไข:
Maybe:RxJava2 เพิ่มรูปแบบใหม่ที่เรียกว่าMaybe, MaybeคือการรวมกันของCompletableและเตียงเดี่ยว
ในภาษาเดียวกันเช่นข้างต้นMaybeสามารถคิดได้ว่าเป็นวิธีการที่ส่งคืน
OptionalบางประเภทOptionalคือ wrapper รอบ ๆ Object ที่บอกอย่างชัดเจนว่าเรามีค่าบางอย่างอยู่ในนั้นObjectหรือไม่ (แทนที่จะเป็น null)
ด้วยการMaybeที่เราสามารถมีค่าบางอย่างเหมือนกันSingleหรือมีอะไรกลับมา - Completableเช่นเดียวกับ นอกจากนี้เช่นเดียวกับทั้งสองข้อเรามีข้อผิดพลาด
Maybeมีค่าเมื่อเราต้องการทำเครื่องหมายว่าObservableอาจไม่มีค่าและจะทำให้เสร็จสมบูรณ์
ตัวอย่างจะดึงมาจากแคชเราไม่จำเป็นต้องมีค่าในแคชดังนั้นในกรณีนี้เราจะดำเนินการให้เสร็จสิ้นเนื่องจากเราจะได้รับonNextค่าจากแคช
สิ่งนี้ควรค่าแก่การจัดการกับค่าที่ไม่ใช่ค่าว่างในสตรีมด้วย RxJava2
Flowable:ก่อนอื่นให้กำหนดแรงดันย้อนกลับ Backpressure เป็นวิธีการจัดการกับสถานการณ์ที่ข้อมูลถูกสร้างขึ้นเร็วกว่าที่จะประมวลผลได้ Flowableมีการรองรับแรงดันย้อนกลับเพื่อให้ล่องขอรายการ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับความแตกต่างที่นี่
Maybe<T>โดยพื้นฐานแล้วSingle<T?>คืออะไร?
Singleเป็น a Completablewith return value ได้หรือไม่?
คำตอบสั้น ๆ ที่ฉันพบที่นี่ในส่วน RXJava