ใครช่วยอธิบายความแตกต่างระหว่าง 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 Completable
with return value ได้หรือไม่?
คำตอบสั้น ๆ ที่ฉันพบที่นี่ในส่วน RXJava