Angular 有没有一种方法可以等待在另一个可观察对象中调用的可观察对象的结果?

Angular 有没有一种方法可以等待在另一个可观察对象中调用的可观察对象的结果?,angular,rxjs,electron,rxjs6,angular8,Angular,Rxjs,Electron,Rxjs6,Angular8,我目前正在尝试构建一个小应用程序来帮助我当地的角色扮演小组。在他们想要的工具中,有一个可编写脚本的随机化器,这样他们就可以构建骰子滚动表。不幸的是,我遇到了一个难题,那就是需要递归调用一个函数,其中包含一个可观察的对象 我已经在这里和Reddit上浏览了一些不同的问题,包括如何从可观测数据中获得结果或等待其解决,但我尝试的所有解决方案要么在此上下文中是无效代码,要么父调用不等待子对象解决。这包括使用map、switchMap和async/await。我一直在想,在这个页面上使用一个可观察的文件加

我目前正在尝试构建一个小应用程序来帮助我当地的角色扮演小组。在他们想要的工具中,有一个可编写脚本的随机化器,这样他们就可以构建骰子滚动表。不幸的是,我遇到了一个难题,那就是需要递归调用一个函数,其中包含一个可观察的对象

我已经在这里和Reddit上浏览了一些不同的问题,包括如何从可观测数据中获得结果或等待其解决,但我尝试的所有解决方案要么在此上下文中是无效代码,要么父调用不等待子对象解决。这包括使用map、switchMap和async/await。我一直在想,在这个页面上使用一个可观察的文件加载是否是错误的

下面是完整的上下文,以防简短的示例遗漏某些内容:

简言之:

@Injectable()
导出类表服务{
构造函数(私有http:HttpClient){}
get(tableId:string):可观察{
返回此.http.get('assets/tables/'+tableId+'.json'))
.烟斗(
catchError(this.handleError)
);
}
//从给定的表或子条目滚动结果。
滚动(tableId:string,entryKey:string){
返回此.get(tableId).pipe(
地图(数据=>{
输出=数据[entryKey];
parts=此.findParts(输出);
parts.forEach((part:string)=>{
如果(第[1]部分)。包括('.')){
常量拆分部分=部分[1]。拆分('.');
//Roll指的是另一个表中的条目。
//这需要在返回之前完成。。。
this.roll(splitPart[0],splitPart[1]).toPromise()
.然后(rollOutput=>output=output.replace(第[0]部分,rollOutput));
}否则{
//处理当前文件的卷。
}
});
返回输出;
}
);
}
私有findParts(条目:字符串){
常量正则表达式=/\[([a-zA-Z.]*)\]/g;
常量部分:字符串[]=[];
让m;
做{
m=regex.exec(条目);
如果(m){
零件。推(m);
}
}while(m);
返回部件;
}
}
这在组件中当前被调用,如下所示:

this.tableService.roll('herigroup')。订阅(
data=>this.output.push(数据),
error=>console.log(错误)
);
heirloom.json表有一些滚动,这些滚动会导致调用[name.format],然后调用[name.json]将滚动name.json文件的“format”条目

我希望它能做的是滚动结果,并替换传家宝滚动中字符串的[name.format]部分

this.tableService.roll('name','format')。订阅(
data=>this.output.push(数据),
error=>console.log(错误)
);
^这将成功返回一个生成的名称,实际上,内部滚动也将产生一个名称,但它对输出应用得太晚,因此组件在完成之前收到结果

我现在得到的是:“传家宝是曾经属于[name.format]的头盔”,而不是“传家宝是曾经属于Amberline Dawnstrider女士的头盔”