2017-10-18 31 views
-1

非常新Observables所以道歉,如果這是基本的,但我已經嘗試了谷歌搜索,並且似乎無法找到我想要的。只運行observables一次,然後檢查是否完成後 - angular2打字稿

這是一個示例plunkr,非常基本。
https://plnkr.co/edit/kgECPQyoKqY7RamebUUu?p=preview

爲什麼我的Initialized方法在我的服務調用它之前不會調用?我認爲initialized觀測值將盡快執行Observable.forkJoin ??我需要以某種方式啓動過程嗎?

爲什麼我的myService.loadOtherData方法似乎永遠不會調用訂閱方法???

在此先感謝

回答

0

如果你是很新的可觀,我建議你開始一個基本的例子。

例如:(僞代碼,也許)

let observable = new Observable<string>(observer => { 
    if (1 == 1) { 
    observer.next("one is one"); 
    } else { 
    observer.error("one is not one"); 
    } 
}); 
observable.subscribe(
    response => console.log(response), 
    error -> console.log(error) 
); 

使用主題更多的是相同的,但一個主題,可以多一點自由使用:

let subject = new Subject(); 
subject.subscribe(response -> console.log(response)); 
subject.next('hello'); 

我相信我看到你把這兩者結合起來,訂閱這個主題,然後用可觀察數據獲取數據?通過這些例子,你是否有足夠的信息,或者你需要一個非常具體的例子?

編輯:

this.initialized.subscribe '啓動過程'。 你調用loadOtherData函數的時間太晚了,這使得你在數據返回時沒有訂閱this.initialized。這就是爲什麼你沒有看到的console.log(「初始化」)

EDIT2:

注意到,一個BehaviorSubject持有它的數據,並返回它的訂閱。沒有必要用空字符串來初始化它。

+0

那麼,如果我有一個可觀察/訂閱的參考,那麼是否有一種方法來「訂閱」已經完成的可觀察項? – Gillardo

+0

就像我說過的,BehaviorSubject返回它的訂閱數據。所以這是一個可行的方法。 – Carsten

相關問題