Angular 使用rxjs向http响应添加数据
我有一个包含驾驶员id的trip实体。 我可以使用RESTFull端点获取trip,例如Angular 使用rxjs向http响应添加数据,angular,rxjs,Angular,Rxjs,我有一个包含驾驶员id的trip实体。 我可以使用RESTFull端点获取trip,例如/trips/2/ //example response { id: "2", driver_id: "123" } 我可以使用端点获取驱动程序详细信息。e、 g./drivers/123/, 我最后尊敬的回答是 //expected response from observable { id: "2", driver_id: "123", detailed_driver: {
/trips/2/
//example response
{
id: "2",
driver_id: "123"
}
我可以使用端点获取驱动程序详细信息。e、 g./drivers/123/
,
我最后尊敬的回答是
//expected response from observable
{
id: "2",
driver_id: "123",
detailed_driver: {
name: "abc",
id: "123"
}
}
目前我的做法如下
this.http("/trips/2/").map(data => data.json()).subscribe(trip => {
this.http("/drivers/" + trip.driver_id + "/").map(data => data.json()).subscribe(driver => {
trip.detailed_driver = driver;
this.trip = trip
}
}
如何使用Rxjs使用这两个端点从单个可观察对象获得最终预期响应?您可以使用
flatMap
操作符和observatable.forkJoin
,如下所述:
this.http.get('/trips/someid')
.map(res => res.json())
.flatMap(res => {
return Observable.forkJoin([
Observable.of(res),
this.http.get('/drivers/'+res['driver_id']).map(res => res.json())
]);
})
.map(res => {
res[0]['detailed_driver'] = res[1];
return res[0]
})
.subscribe(
(data) => {
}
);
flatMap
允许在收到第一个请求时执行另一个请求<代码>可观察。forkJoin允许在最后接收第一个响应的响应和第二个响应的结果
这样,您就可以用第二个结果更新第一个结果…您可以添加当前的提取代码吗?这里有什么问题?单击
朋友选项卡并查看frineds.ts
。我试图实现您建议的代码,但没有出现任何错误。事实上,我的代码中有一个输入错误:-(}
在forkJoin
的末尾…我更新了我的答案并修复了您的错误:。感谢您指出@micronyks!但我在objectconsole.log(data)中找不到所需的数据
。你能帮我吗?它成功了!谢谢…我需要做一些更改,比如在第二个this.http.get()
中添加了addedin.map()res=>res.json()
,在最后的map函数中返回res[0]
。