多个HTTP请求2

问题描述:

后端的API:
网址: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" 

    } 
] 

网址: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" 

} 

我需要在视图中显示名称,occ以上述两个api网址提供每个人的完整地址。 注意:每个人的地址可能不可用。

请建议这样做异步使用HTTP服务和承诺的最佳方法/观测量的角2

我的解决方案:
创建getAllPersons的http请求的承诺。
然后功能:

  • 将响应保存在组件类变量中。
  • 为每个对象的address_url创建一个http promise的数组(如果存在的话)。
  • 返回Promise.all([地址URL承诺数组])

在然后函数:

  • 迭代响应逐一并将其添加到含组分类address_url 变量。

有没有更好的办法?还建议如果这是一个三方面的层次结构。

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