问题描述
我有几个异步请求的组合,需要一起完成(使用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())作为参数,在执行获取请求时, second(prop2)是第一个的简单操作,而第三个( prop3 )也取决于 second 作为获取请求中的参数。我试过使用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 };
})
)
}
));
}
这一切都应该在resolve函数中完成,并且应该通过从this.gatherAllRelevantData中获取数据(不会发生)来启动fullData对象,并且无需执行this.gatherAllRelevantData:
resolve(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<any>
{
const fullDataObservable = forkJoin(
{
AProp : this.myFirstSrv.getAProp(),CProp : this.myThirdSrv.getCProp(),prop1 : this.gatherAllRelevantData().map(item => items.prop1),prop1 : this.gatherAllRelevantData().map(item => items.prop1)
});
return fullDataObservable;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)