2016-11-28 8 views
1

Observableから解決された値を含むデータオブジェクトを構築するときに、Observable<Response>を返す方法を特定できません。Observablesの値からデータを作成し、HTTP呼び出し後にObservable <Response>を返す方法は?

forkJoin()を使用して最初に値を解決してからsubscribeを試して、this.http.post()...コールを返してみました。ただし、これにより、機能自体にサブスクライブすることはできませんfetchData().subscribe(...)。私は明らかに何かが欠けている。

解決済みのObservable値を含むデータオブジェクトを作成し、その後Observable<Response>オブジェクトを返すにはどうすればよいですか?

// Simplified example 

fetchData() { 

    // Construct the data 
    var data = { 
     v1 : this.getValueFromObservable1(), 
     v2 : this.getValueFromObservable2() 
    }; 

    // Make the call, return the Observable<Response> object 
    return this.http 
     .post('api/authorization', JSON.stringify(data)); 
} 

答えて

0

これは、あなたが欲しいものを行う必要があります。私の例では

fetchData() { 
    return this.getValueFromObservable1() 
    .mergeMap(v1 => 
      this.getValueFromObservable2() 
      .map(v2 => { v1: v1, v2: v2}) 
    ); 
} 
+0

最後の2行は、ボトルネックを形成し、どのようにすることができます 'this.post(...)' '別名観察可能' 'data'オブジェクトが' 'Observable''データに依存することを知って、返されますか? 'this.http.post(url、fetchData())'のようなものをお勧めしますか? – Dalie

+0

申し訳ありませんが、私はあなたのコメントを理解していません。アイデアは最初のイベントを待ってから2番目のイベントを待ってからオブジェクトをビルドすることでした。 'zip()'のような良い方法があるかもしれませんが、両方のリクエストが "並列"で実行できますが、私はTSを使わず、rxjs演算子もよく分かりません。 –

関連する問題