2016-09-23 2 views
1

最初のajax呼び出しの結果が次のajax呼び出しのセットで使用されるAngular 2アプリケーションで2つの連続したhttpリクエストを作成したいとします。私はそれをどのように構造化するかを理解するために苦労しています。Angular 2 AppでRxJSを使用して連続したajaxリクエストを作成する方法

このアレンジの目的は、後続のajax呼び出しが、最初の呼び出しで取得されたオブジェクトのセットに詳細(新しいプロパティ)を追加する目的でデータを取得することです。

私はこれが1 + Nの問題のAjaxバージョンだが、私はデザインを制限していることを理解している。

以下の疑似コードは、必要と思われる行に沿った(機能本体)ですが、おそらくクリーナーの方法があります。

let finalObservable = Observable.create<viewModel>(); 

var firstAjax = this._http.request(url1, options) 
    .map((rs)=>rs.json()); 

firstAjax.subscribe((d)=>{ 
    // d is an array of plain js objects 
    let secondAjax: Observable<any>[]; 
    d.each((item, index)=>{ 
    // roll item properties and index into url2s query string 
    secondAjax.push(_http.request(url2, options); 
    }); 
    // assumption is I can pass an array of observables into forkJoin 
    Observable.forkJoin(secondAjax) 
    .subscribe((allRs)=>{ 
     allRs.each((rs, index)=>{ 
     d[index].newProperty = rs.text() 
     }); 
     // give a value to the final observable 
     finalObservable.publish(d); 
    }); 
}); 

// Observable does not have a value yet, but will get one when the code 
// above runs. 
return finalObservable; 

".publish"についてはわかりません。私はそれが何であるかを知った後、観測可能な値を与えようとしています。それは、観測値を作成したときよりも後であります。

答えて

1

RXチェーンの要求への道はここflatMap

経由で簡単な例です:http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

:ここ

his.http.get('./customer.json').map((res: Response) => { 
       return res.json(); 
      }) 
      .flatMap((customer) => this.http.get(customer.contractUrl)).map((res: Response) => res.json()) 
      .subscribe(res => this.contract = res); 

は、同様の詳細とデモです

関連する問題