angular - ความแตกต่างระหว่าง new Observable(...) และ Rx.Observable.create(...)?
ฉันกำลังอัปเดตซอฟต์แวร์ของเราโดยแทนที่ทุกคำสัญญา (และของยุ่งยากอื่นๆ) ด้วย observables เพื่อให้แน่ใจว่าฉันปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด ฉันจึงทำการค้นหาอย่างรวดเร็วทาง Google และสังเกตว่าในบางกรณี ไวยากรณ์ที่แนะนำคือแบบสร้างจากอินสแตนซ์ ในขณะที่ในบางกรณี ตัวอย่างจะเรียกโดยไฟร์ทอรี
const byInstance = new Observable(_ => { ... });
const byFactory = Rx.Observable.create(_ => { ... });
ผมอยากรู้ว่าความแตกต่างที่แท้จริงคืออะไร พวกมันสามารถใช้แทนกันได้อย่างแม่นยำหรือไม่ มันเป็นไวยากรณ์/วิธีการแบบเก่าหรือใหม่หรือไม่ เกี่ยวข้องกับเฟรมเวิร์กหรือไม่ และแน่นอนว่าควรเลือกอันไหน (ภายใต้เงื่อนไขว่ามันไม่ใช่เรื่องความคิดเห็นหรือมีข้อโต้แย้ง ฯลฯ)
คำตอบ #1
ไม่มีความแตกต่าง Observable.create เรียก new Observable
ตามที่คู่มือกล่าว
Observables ถูกสร้างขึ้นโดยใช้ Rx.Observable.create หรือ creation operator
<...>
Rx.Observable.create เป็นชื่อเรียกอีกชื่อหนึ่งของคอนสตรัคเตอร์ Observable
Observable.create มักถูกใช้ตามธรรมเนียม น่าจะเพราะมันอ่านง่ายกว่าเมื่อเรียงต่อกันเป็นสายโซ่ และสอดคล้องกับเมทอดสแตติก Observable อื่นๆ ที่สร้าง observables เช่นกัน
ความแตกต่างอาจปรากฏในคลาสย่อย ตัวอย่างเช่น Subject.create เท่ากับ AnonymousSubject.create และไม่เท่ากับ new Subject โดยปกติ Subject.create เป็นตัวที่ให้พฤติกรรมที่ต้องการ ขณะที่ new Subject เป็นแบบระดับต่ำมากกว่า สิ่งนี้ยืนยันประเด็นเกี่ยวกับธรรมเนียมปฏิบัติ
ในทางกลับกัน บางคลาส (โดยเฉพาะ BehaviorSubject) ควรถูกใช้งานกับ new เพราะว่าลายเซ็นของ create ไม่อนุญาตให้ระบุพฤติกรรมที่ต้องการให้กับพวกมันได้
คำตอบ #2
ทั้งสองสามารถใช้แทนกันได้ แต่เอกสารประกอบแบบ inline ระบุว่า Observable.create ถูกยกเลิกแล้ว (ลิงก์สำหรับรองรับอนาคตอยู่ที่นี่)