Javascript 从单个HTTP请求生成多个HTTP请求2

Javascript 从单个HTTP请求生成多个HTTP请求2,javascript,angular,httprequest,Javascript,Angular,Httprequest,后端API: 网址: 网址: 需要对象数组:- { "name": "ABC", "occupation": "Student", "address": "XYZ", "city": "Phoenix", "state": "Arizona", "pin code": "3243242" } 我需要在一个视图中显示上述两个api URL的每个人的姓名、职业和完整地址。 注意:可能无法提供每个人的地址 请建议使用HTTP服务和Angular 2中

后端API:
网址:

网址:

需要对象数组:-

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

}
我需要在一个视图中显示上述两个api URL的每个人的姓名、职业和完整地址。 注意:可能无法提供每个人的地址

请建议使用HTTP服务和Angular 2中的Promises/Observable异步执行此操作的最佳方法

我的解决方案:
创建getAllPersons的http请求承诺。
在then功能中:

  • 将响应保存在组件类变量中
  • 创建每个对象的地址\ url(如果存在)的http承诺数组
  • 返回承诺。全部([地址url承诺数组])
在then功能中:

  • 逐个迭代响应并将其添加到组件类 包含地址和url的变量

还有更好的办法吗?还建议这是否是三向层次结构。

使用
flatMap
forkJoin

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]
   ...
});

使用
flatMap
forkJoin

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]
   ...
});