Subject、BehaviorSubject、AsyncSubject ReplaySubject的區別

// 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

相關文章
相關標籤/搜索