0

我的路由模块中有一个解析器

{
    path: 'path1',
    component: FirstComponent,
    resolve: {
     allOrders: DataResolver
    }

}

然后在我的解析功能中有

resolve(): Observable<Array<string>> {

    return this.serviceA.getAllfooNames()
    .map(result=> {

         /* result is an array of strings*/
         return this.serviceB.getAllBarNames(result[0])

         /*orders is also supposed to be an array of strings*/     
          .map(orders=> return orders)                        
    });

 }
}

我希望根据allOrders键存储价值订单。我想将订单数组作为 ActivatedRoute 快照中的数据传递。请帮忙。

4

1 回答 1

1

您可以混合使用concatMapzip

resolve(): Observable<Array<string>> {
  return this.serviceA.getAllfooNames().pipe(
    concatMap((names) => 
      zip(...names.map((name) => this.serviceB.getAllBarNames(name)))
    ),
    map((...names) => 
      names.reduce((acc, curr) => acc.concat(curr), [])
    ) 
  ); 
}

这将在一个大字符串数组中返回从 serviceB 调用返回的所有字符串。

基本上它的作用是,你调用getAllfooNamesconcatMap等到这个请求完成,它会在一个字符串中返回一堆名称。之后,您与操作员一起拿起这些zip。该操作符使用数组映射方法执行传入的所有可观察对象,并在所有对象完成后发出。

然后在地图中拾取它,该地图接收多个字符串数组作为参数。然后你用reduce它来制作一个大数组。

于 2018-10-29T13:47:43.973 回答