2016-11-07 7 views
5

返されるObservableに値を渡すために、Observable<any>を返しますが、別の非同期タスクを完了する必要がある(Observable<string>)を返す関数を作成したいとします。角2 rxjsネストされたオブザーバブル

@Injectable() 
export class MyComponent 
{ 

     GetAuthToken = function() : Observable<string> 
     { 
      return this._storageService.GetAsString('authToken'); 
     } 

     GetData = function(authToken) : Observable<any> 
     { 

      let headers = new Headers(); 
      headers.append('authToken', authToken); 
      var getUsers = this._http.get('/api/endpoint', { headers: headers }) 
       .map((resonse: Response) => resonse.json())); 

      return getUsers;   
     } 


     DoIt = function() : Observable<any> 
     { 
      this.GetAuthToken().Subsribe(t=> { 
       return GetData(t); 
      }) 
     }   


} 

だから代わりのGetData関数にauthTokenのパラメータを渡す、私はのGetData関数内GetAuthToken機能を実行したい、その完了を待って、まだ観察できるHTTPを返します。 、ではないのGetDataが観察加入者を返すドイト機能を実行

+2

完全に無関係な質問を使用しても可能である。なぜあなたは構文を使用します: 'GetAuthToken = function(){...}'と 'GetAuthToken(){...}'ではありません。それでも同じじゃない?) – martin

+1

'Observable.forkJoin'を使用して、これをチェックしてください:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md –

+0

@Martin http://stackoverflow.com/question/336859/javascript-function-declaration-syntax-var-fn-function-vs-function-fn – gunwin

答えて

6

concatMap()を使用してみてください:

DoIt() : Observable<any> 
{ 
    return this.GetAuthToken() 
     .concatMap(token => this.GetData(token)); 
} 
+0

パーフェクト。これは機能します。私のWebAPIサービスが実行されていなかったため、nullの問題が発生しました。ありがとうございました! – gunwin

+0

同様の問題 - concatMap()は完璧に動作します!ありがとうございました。 – Reinhard

0

をこれがflatMap

DoIt() : Observable<any> 
{ 
    return this.GetAuthToken() 
     .flatMap(token => this.GetData(token)); 
}