- เรื่อง : ในการสมัครก็มักจะได้รับข้อมูลที่ถูกผลักหลังจากที่มันของการสมัครสมาชิกคือค่าผลักดันก่อนหน้านี้จะไม่ได้รับ
const mySubject = new Rx.Subject();
mySubject.next(1);
const subscription1 = mySubject.subscribe(x => {
console.log('From subscription 1:', x);
});
mySubject.next(2);
const subscription2 = mySubject.subscribe(x => {
console.log('From subscription 2:', x);
});
mySubject.next(3);
subscription1.unsubscribe();
mySubject.next(4);
จากตัวอย่างนี้นี่คือผลลัพธ์ที่จะพิมพ์ในคอนโซล:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
สังเกตว่าการสมัครรับข้อมูลที่มาถึงล่าช้าจะพลาดข้อมูลบางส่วนที่ถูกส่งไปยังหัวเรื่องได้อย่างไร
- เล่นซ้ำหัวเรื่อง : สามารถช่วยได้โดยการเก็บบัฟเฟอร์ของค่าก่อนหน้าซึ่งจะส่งไปยังการสมัครสมาชิกใหม่
ต่อไปนี้เป็นตัวอย่างการใช้งานสำหรับการเล่นซ้ำหัวข้อที่buffer of 2 previous values
มีการเก็บรักษาและส่งออกในการสมัครสมาชิกใหม่:
const mySubject = new Rx.ReplaySubject(2);
mySubject.next(1);
mySubject.next(2);
mySubject.next(3);
mySubject.next(4);
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
นี่คือสิ่งที่ให้เราที่คอนโซล:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Behavior subject : คล้ายกับ replay subject แต่จะฉายซ้ำเฉพาะค่าที่ปล่อยออกมาล่าสุดหรือเป็นค่าดีฟอลต์หากไม่มีการปล่อยค่าก่อนหน้านี้:
const mySubject = new Rx.BehaviorSubject('Hey now!');
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
และผลลัพธ์:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
อ้างอิง: https://alligator.io/rxjs/subjects/