Javascript 从单个HTTP请求生成多个HTTP请求2
后端API: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中
网址: 网址: 需要对象数组:-
{
"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承诺数组])
- 逐个迭代响应并将其添加到组件类 包含地址和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]
...
});