- Chủ đề : Khi đăng ký, nó luôn nhận được dữ liệu được đẩy sau khi đăng ký, tức là các giá trị được đẩy trước đó không được nhận .
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);
Với ví dụ này, đây là kết quả sẽ được in trong bảng điều khiển:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
Lưu ý rằng các đăng ký đến muộn sẽ bỏ sót một số dữ liệu được đưa vào chủ đề như thế nào.
- Các chủ đề phát lại : có thể giúp đỡ bằng cách giữ một bộ đệm các giá trị trước đó sẽ được phát cho các đăng ký mới.
Dưới đây là một ví dụ sử dụng cho các chủ đề phát lại trong đó a buffer of 2 previous values
được lưu giữ và phát ra trên các đăng ký mới:
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);
});
Đây là những gì mang lại cho chúng ta ở bảng điều khiển:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Chủ thể hành vi : tương tự như chủ thể phát lại, nhưng sẽ chỉ phát lại giá trị được phát cuối cùng hoặc giá trị mặc định nếu không có giá trị nào được phát trước đó:
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);
});
Và kết quả:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
Tham khảo: https://alligator.io/rxjs/subjects/