2016-09-25 86 views
1

我試圖得到反應式編程的基礎知識更紮實的理解,所以我打算通過這裏的例子: http://reactivex.io/rxjs/manual/tutorial.html#creating-observables爲什麼沒有這個簡單的例子rxjs像預期的那樣

我只是在文本編輯器中鍵入它們並通過節點在終端中運行它們。第一個例子沒有輸出(第二個例子工作,所以它不是加載庫的問題)。我期待它輸出'foo',但我什麼也沒得到。爲什麼?

var myObservable = Rx.Subject.create(); 
myObservable.subscribe(value => console.log(value)); 
myObservable.next('foo'); 

回答

2

調用Rx.Subject.create()不帶參數的創建AnonymousSubject不具有destination觀察:

export class Subject<T> extends Observable<T> implements ISubscription { 

    ... 

    static create: Function = <T>(destination: Observer<T>, source: Observable<T>): AnonymousSubject<T> => { 
    return new AnonymousSubject<T>(destination, source); 
    }; 

    ... 
} 

AnonymousSubject實施next簡單地調用轉發到destination觀察者,如果沒有一個,它什麼都不做:

export class AnonymousSubject<T> extends Subject<T> { 

    constructor(protected destination?: Observer<T>, source?: Observable<T>) { 
    super(); 
    this.source = source; 
    } 

    next(value: T) { 
    const { destination } = this; 
    if (destination && destination.next) { 
     destination.next(value); 
    } 
    } 

    ... 
} 

所以你問題中的例子什麼都不做。這是可能的,這是在本教程的一個簡單的錯誤,如下面將看到foo登錄到控制檯:

var myObservable = new Rx.Subject(); 
myObservable.subscribe(value => console.log(value)); 
myObservable.next('foo'); 

注意上面的代碼創建一個Subject,而不是AnonymousSubject

+0

感謝所有的細節,我真的很感謝 - 這是非常有幫助的。 –

相關問題