2016-09-11 6 views
0

私は2つの観測値を連鎖しようとしています。私はIonic2フレームワークで作業しています。最初のオブザーバブルは、モバイルデバイスからアクセストークンを取得しようとし、その後、2番目に観測可能なアクセストークンでAPIを呼び出します。しかし、何らかの理由で、第2の観測値はチェーンに登録されていても決して呼ばれません。2つの観測値を連鎖する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

私はそれを説明しようとすることができましたが、Observables自身がIonic2を使って学習しているので、このリンクがあなたに役立つことを願っています - http://reactivex.io/documentation/operators/flatmap.html。単純なルールは、別の観測可能なストリームを返す必要がある場合(または別のhttp要求を行う場合)、 'flatMap()'があなたの友人であるということです。私はあなたが好きなら答えとして掲示することができます。 – Brad

答えて

1

:基本的にはこのような何かをしなければなりません。

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

あなたは購読していますが、購読していることはありません。あなたの最初の観測値は、決してサブスクリプションされない観測値を放出します。あなたがflatMap()を使用する必要が観測をチェーンするとき

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

HTH

関連する問題