我有几个需要一起完成的异步请求的组合(使用 forkJoin 完成) - 这样做时,我启动了一个对象:
export class fullData
{
AProp : any;
BProp : any;
CProp : any;
}
const fullDataObservable : fullData = forkJoin(
{
AProp : this.myFirstSrv.getAProp(),
BProp : this.mySecondsSrv.getBProp(),
CProp : this.myThirdSrv.getCProp()
});
return fullDataObservable;
到目前为止,一切都很好。现在 - 我在这个对象中有3 个新属性:
export class fullData
{
AProp : any;
BProp : any;
CProp : any;
prop1 : any;
prop2 : any;
prop3 : any;
}
然后第一个(prop1)取决于 CProp 值(或 this.myThirdSrv.getCProp())作为参数,在执行 get 请求时,第二个(prop2)是第一个的简单操作,第三个( prop3 ) 也取决于第二个作为获取请求中的参数。我试过使用mergeMap,但没有用。我究竟做错了什么 ?:
gatherAllRelevantData() : any
{
//this.myService.getProp1() return observable after get request
this.myService.getProp1().pipe
(
mergeMap((prop1Value : any[]) =>
{
//this.myService.getResultAfterSimpleManipulation return object, not observable
let prop2Values : any[] = this.myService.getResultAfterSimpleManipulation(prop1Value);
//the this.getProp3Value return observable aftet get request
return this.getProp3Value(prop2Value).pipe(
map(prop3Values =>
{
return { prop1 : prop1Value, prop2 : prop2Values, prop3 : prop3Values };
})
)
}
));
}
这一切都应该在一个解析函数中完成,并且应该通过从 this.gatherAllRelevantData 获取数据(没有发生)并且不需要执行 this.gatherAllRelevantData 来启动 fullData 对象:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any>
{
const fullDataObservable = forkJoin(
{
AProp : this.myFirstSrv.getAProp(),
BProp : this.mySecondsSrv.getBProp(),
CProp : this.myThirdSrv.getCProp(),
prop1 : this.gatherAllRelevantData().map(item => items.prop1),
prop1 : this.gatherAllRelevantData().map(item => items.prop1),
prop1 : this.gatherAllRelevantData().map(item => items.prop1)
});
return fullDataObservable;
}