// Subject 既是 Observable 對象,又是 Observer 對象
let s$ = new Subject();
let s = s$.asObservable();
// 大意是BehaviorSubject會發送離訂閱最近的上一個值,沒有上一個值的時候會發送默認值(若是有的話)
let bs$ = new BehaviorSubject<number>(0);
let bs = bs$.asObservable();
// 歸納的講就是使用AsyncSubject不管發送多少個數據事件,觀察者永遠只能接受到最後一個數據(完成事件必須調用)。若是發送數據過程當中出現錯誤,觀察者僅僅接受到錯誤信息。
let as$ = new AsyncSubject();
let as = as$.asObservable();
// 該Subject會緩存全部的發射數據,不管觀察者什麼時候訂閱,Subject都會將全部內容發送給訂閱者。
let rs$ = new ReplaySubject();
let rs = rs$.asObservable();
let i = 0;
let time = setInterval(() => {
if (i > 5) {
bs$.complete();
s$.complete();
as$.complete();
rs$.complete();
clearInterval(time);
}
i++;
bs$.next(i);
s$.next(i);
as$.next(i);
rs$.next(i);
rs.subscribe(res => console.log('ReplaySubject', res)).unsubscribe();
as.subscribe(res => console.log('AsyncSubject', res)).unsubscribe();
s.subscribe(res => console.log('Subject', res)).unsubscribe();
bs.subscribe(res => console.log('BehaviorSubject', res)).unsubscribe();
}, 1000);複製代碼
一、Subject 既是 Observable 對象,又是 Observer 對象,只發送訂閱後的接收的數據!
javascript
二、大意是BehaviorSubject會發送離訂閱最近的上一個值,沒有上一個值的時候會發送默認值(若是有的話)java
三、歸納的講就是使用AsyncSubject不管發送多少個數據事件,觀察者永遠只能接受到最後一個數據(完成事件必須調用)。若是發送數據過程當中出現錯誤,觀察者僅僅接受到錯誤信息緩存
四、該Subject會緩存全部的發射數據,不管觀察者什麼時候訂閱,Subject都會將全部內容發送給訂閱者。ui