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