在路由解析器中调用嵌套 http 返回可观察而不是数据



我正在尝试在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}

在组件中,我期待 serchList 服务方法的结果,而不是我变得可观察。

firstHttp(): Observable<data1>;
searchListing(): Observable<data2>;
// you are trying to map:
map(Observable<data1>): Observable<Observable<data2>>

问题是 - 如何压平它?

RxJ 有几种方法:

1(我们是否需要处理来自每个内部可观察值的所有事件?
mergeMap/concatMap- 事件的顺序重要吗?

2(我们可以从内部可观察跳过一些事件吗?
switchMap/exhaustMap- 新事件是否具有更高的优先级?

您可以替换mergeMap上的map以平展可观察。

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);
})
)

最新更新