第三章 - Subject 和 Observable 理解

1.Observable 已經有初步理解了,就是一個可觀察的對象,簡而言之就是可以被訂閱的一個事件流,亦或是數據流

2.Subject 既是一個觀察者,也是一個可觀察的對象。

 

Subject

網上看到一段釋義覺得很貼切,在此引用一下。

可以將 Subject 看作是微信公衆號,Observable 是微信用戶來理解,分三步拆解。

1.new 一個 Subject 的時候,Subject 內部清單是空的,這時候沒有任何 Observable 訂閱它。

2.Subject 提供一個可被訂閱的方法,當 Observable 訂閱這個方法的時候,Subject 內部清單會添加這個 Observable

3.Subject 既然也是一個 Observable,那麼它自身也能被訂閱,也就是 Subject 也有 next,error,complete 三種狀態。

當我們對 Subject 本身進行訂閱時,它會對自身內部的清單(微信用戶列表)進行循環遍歷,並將值發送給每一個 Observable

var subject = new Rx.Subject();

var observerA = {
    next: value => console.log('A>>> ' + value),

var observerB = {
    next: value => console.log('BA>>> ' + value),
}

subject.subscribe(observerA);
subject.subscribe(observerB);

subject.next(1);
// "A>>> 1"
// "B>>> 1"
subject.next(2);
// "A>>> 2"
// "B>>> 2"

 BehaviorSubject

var subject = new Rx.BehaviorSubject(0); // 0 爲起始值
var observerA = {
    next: value => console.log('A next: ' + value),
    error: error => console.log('A error: ' + error),
    complete: () => console.log('A complete!')
}

var observerB = {
    next: value => console.log('B next: ' + value),
    error: error => console.log('B error: ' + error),
    complete: () => console.log('B complete!')
}

subject.subscribe(observerA);
// "A next: 0"
subject.next(1);
// "A next: 1"
subject.next(2);
// "A next: 2"
subject.next(3);
// "A next: 3"

setTimeout(() => {
    subject.subscribe(observerB); 
    // "B next: 3"
},3000)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章