Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 角度2路径解析多个嵌套观测值_Angular_Routes_Observable_Resolve - Fatal编程技术网

Angular 角度2路径解析多个嵌套观测值

Angular 角度2路径解析多个嵌套观测值,angular,routes,observable,resolve,Angular,Routes,Observable,Resolve,我有一个observable,订阅时也有嵌套的observable 它源于一个问题,即在for循环中多次调用api以获得最终输出 更具体地说,我首先调用小部件的api,然后调用api返回一个foo数组,并将其添加到小部件对象中。最后,我循环遍历foo数组并检索foo.id,它用于获取bar。然后将Bar添加到foo[x]元素中 当我在路由器中解析widget时,widget的属性在那里,但是foo数组作为可观察的返回。我想在解析路由之前订阅foo,然后在foo中循环并订阅每个foo元素中的bar

我有一个observable,订阅时也有嵌套的observable

它源于一个问题,即在for循环中多次调用api以获得最终输出

更具体地说,我首先调用小部件的api,然后调用api返回一个foo数组,并将其添加到小部件对象中。最后,我循环遍历foo数组并检索foo.id,它用于获取bar。然后将Bar添加到foo[x]元素中

当我在路由器中解析widget时,widget的属性在那里,但是foo数组作为可观察的返回。我想在解析路由之前订阅foo,然后在foo中循环并订阅每个foo元素中的bar

let routes: Routes = [{
  path: 'landing-page',
  component: LandingPageComponent,
  resolve: {
    widget: WidgetResolve,
    foo: FooResolve(widget),
    bar: BarResolve(foo)
  }
}];

我使用flatMap和forkJoin来允许在一个订阅中解析多个api调用,而不是返回嵌套的观察值。答案是基于一篇文章

getWidget(id){
返回可观察的forkJoin(
this.service.getWidget(id),
this.getFoo(id)
).map(res=>{
res[0].foo=res[1];
返回res[0];
});
}
getFoo(id):可观察{
返回此.service.getFoo().flatMap(fooArr=>{
返回可观察的forkJoin(
fooArr.map((foo:any)=>{
返回this.service.getBar(foo.id,id)
.map((barArr:any[])=>{
foo.bar=barArr;
返回foo;
});
})
);
});
}    

我使用flatMap和forkJoin来允许在一个订阅中解析多个api调用,而不是返回嵌套的观察值。答案是基于一篇文章

getWidget(id){
返回可观察的forkJoin(
this.service.getWidget(id),
this.getFoo(id)
).map(res=>{
res[0].foo=res[1];
返回res[0];
});
}
getFoo(id):可观察{
返回此.service.getFoo().flatMap(fooArr=>{
返回可观察的forkJoin(
fooArr.map((foo:any)=>{
返回this.service.getBar(foo.id,id)
.map((barArr:any[])=>{
foo.bar=barArr;
返回foo;
});
})
);
});
}    
getWidget(id) {
  return Observable.forkJoin(
    this.service.getWidget(id),
    this.getFoo(id)
    ).map(res => {
      res[0].foo = res[1];
      return res[0];
    });
}


getFoo(id): Observable<any[]> {
  return this.service.getFoo().flatMap(fooArr => {
    return Observable.forkJoin(
      fooArr.map((foo: any) => {
        return this.service.getBar(foo.id, id)
        .map((barArr: any[]) => {
          foo.bar = barArr;
          return foo;
        });
      })
      );
  });
}