我正在尝试在resolve.ts中调用嵌套的HTTP调用。并以以下方式实现。
app.route.js:
{
path: 'result/:start_date/:end_date',
component: ResultComponent,
resolve:{hnData:ResultResolver}
}
以下是我的解析器代码
result.resolver.ts
resolve(route: ActivatedRouteSnapshot) {
return this.service.firstHttp()
.pipe(
map((data)=>{
param['data_from_firstHttp']= data.result;
param['checkinDate']=route.paramMap.get('start_date');
param['checkoutDate']=route.paramMap.get('end_date');
return this.service.searchListing(param);
})
)
和组件代码
result.component.ts
{ hnData : Observable}
在此组件中,我期望从serchListing服务方法获得结果,但是我变得可以观察到了。
答案 0 :(得分:0)
firstHttp(): Observable<data1>;
searchListing(): Observable<data2>;
// you are trying to map:
map(Observable<data1>): Observable<Observable<data2>>
问题是-如何展平?
RxJ有几种方法:
1)我们是否需要处理每个内部Observable中的所有事件?
mergeMap/concatMap
-事件的顺序重要吗?
2)我们可以跳过内部Observable的某些事件吗?
switchMap/exhaustMap
-新事件是否具有更高的优先级?
您可以将map
上的mergeMap
替换为可观察的平面。
resolve(route: ActivatedRouteSnapshot) {
return this.service.firstHttp()
.pipe(
mergeMap((data)=>{
param['data_from_firstHttp']= data.result;
param['checkinDate']=route.paramMap.get('start_date');
param['checkoutDate']=route.paramMap.get('end_date');
return this.service.searchListing(param);
})
)