2016-09-11 51 views
0

我試圖鏈接兩個可觀察到的東西。我正在與Ionic2框架合作。第一個observable嘗試從移動設備中獲取訪問令牌,然後第二個observable使用該訪問令牌調用api。但由於某種原因,即使我訂購了這個鏈條,第二個可觀察對象也永遠不會被調用。鏈接兩個可觀察到的http和存儲

我缺少什麼?

this.observableChain = Observable.fromPromise(this.storage.get('accessToken')) 
    .map(accessToken => this.http.post('http://1234/user/login', {'accessToken': accessToken})) 
    .subscribe(function(result) { 
    console.log(result); 
    }, function(error) { 
    console.log(error); 
    }); 

在此先感謝。

+1

您是否嘗試過'(''的地圖()'flatMap)呢? – Brad

+0

平面圖已修復它。非常感謝。你能向我解釋爲什麼這個修復了嗎? – Twoez

+0

我可以嘗試解釋它,但我只是在使用Ionic2學習Observables,所以希望這個鏈接可以幫助你 - http://reactivex.io/documentation/operators/flatmap.html。簡單的規則是,如果您需要返回另一個observable的流(或者在您的情況下創建另一個http請求),那麼'flatMap()'是您的朋友。如果你喜歡,我可以將它作爲答案發布。 – Brad

回答

1

鏈接時,你需要使用flatMap()觀測。

Observable.fromPromise(this.storage.get('accessToken')) 
    .flatMap(accessToken => 
     this.http.post('http://1234/user/login', {'accessToken': accessToken}) 
    ) 
    .subscribe(
     result => console.log(result), 
     error => console.log(error) 
    ); 

這個概念的一個很好的解釋可以在這裏找到 - http://reactivex.io/documentation/operators/flatmap.html

0

您已訂閱,但沒有訂閱該鏈的東西。你的第一個可觀察者發出一個從不訂閱的可觀察對象。基本上,你必須做這樣的事情:

obs1.subscribe(obs2 => obs2.subscribe(result => ...)) 

HTH