2017-04-06 18 views
1

バックエンドAPIの:
URL:http://www.sample.com/getAllPersons複数のHTTPリクエスト2

[ 
    { 
     "name": "ABC", 
     "occupation": "Student", 
     "address_url": "http://www.sample.com/address/person=hgjgjgyyfhg" 

    }, 
    { 
     "name": "ABC1", 
     "occupation": "Carpenter", 
     "address_url": "http://www.sample.com/address/person=fsdafdsa" 

    }, 
    { 
     "name": "ABC2", 
     "occupation": "Developer" 

    }, 
    { 
     "name": "ABC3", 
     "occupation": "Tester", 
     "address_url": "http://www.sample.com/address/person=sgdfsgd" 

    } 
] 

URL:http://www.sample.com/address/person=hash_value

{ 
    "address": "XYZ", 
    "city": "Phoenix", 
    "state": "Arizona", 
    "pin code": "3243242" 
} 

は、オブジェクトの配列を必要とする: -

{ 
    "name": "ABC", 
    "occupation": "Student", 
    "address": "XYZ", 
    "city": "Phoenix", 
    "state": "Arizona", 
    "pin code": "3243242" 

} 

名前を表示する必要があります。上記の2つのapiのURLを持つすべての人のアップアップと完全なアドレス。 注:すべての人のアドレスは利用できない場合があります。 getAllPersonsのhttpリクエストの約束を作成し

アンギュラ2に私の解決策を

をこの非同期で使用してHTTPサービスとの約束/観測を行うための最善の方法を提案してください。
次に関数で :

  • コンポーネントクラス変数に応答を保存します。
  • すべてのオブジェクトのaddress_url(存在する場合)のhttp約束の配列を作成します。
  • 戻りPromise.all([アドレスURL約束の配列])を関数で

  • 反復応答を1つずつコンポーネントクラス 変数含むaddress_urlに追加します。

もっと良い方法がありますか?これが3方向階層であることも示唆します。

答えて

0

使用flatMapforkJoin

var o = http.get('http://www.sample.com/getAllPersons') 
    .flatMap(t=> Observable.forkJoin( 
      t.json().filter(x=>x.address_url != null) 
      .map(y=> http.get(y.address_url).map(t=>json())) 
    )); 

は次のように登録:

o.subscribe(arr=> { 
    //arr[0] --> address_url[0] 
    //arr[1] --> address_url[1] 
    ... 
}); 
関連する問題