我的路由模块中有一个解析器
{
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 快照中的数据传递。请帮忙。
您可以混合使用concatMap
和zip
:
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 调用返回的所有字符串,在一个大的字符串数组中。
基本上它的作用是,您调用getAllfooNames
,然后concatMap
等待此请求完成,它会在字符串中返回一堆名称。之后,您可以与zip
接线员一起领取。这个操作符使用数组 map 方法执行传入的所有 observables,并在所有它们完成后发出。
然后在映射中获取它,该映射接收多个字符串数组作为参数。然后reduce
,您可以将其放入一个大数组中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句