Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用rxjs向http响应添加数据_Angular_Rxjs - Fatal编程技术网

Angular 使用rxjs向http响应添加数据

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: {

我有一个包含驾驶员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: {
    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!但我在object
console.log(data)中找不到所需的数据
。你能帮我吗?它成功了!谢谢…我需要做一些更改,比如在第二个
this.http.get()
中添加了addedin
.map()res=>res.json()
,在最后的map函数中返回res[0]