我最近转换了一个函数来动态地从磁盘而不是内存中检索数据,并且在此过程中从同步返回变量到返回Observable。
作为此转换的一部分,每个依赖函数都必须通过Observables转换为异步,并且其中一个函数执行嵌套条件调用,该调用获取类别的最后一个场景,或者如果没有类别生成的先前场景,则获取默认场景:
public generateScenario(category: string, value: number = 1) : Observable<Scenario>
{
return this.getHistory(category).map(scenario => {
if(scenario === null)
{
return this.defaultService.getDefault(category, value);
}
else
{
return scenario;
}
});
}
这里this.defaultService.getDefault(category, value)
返回一个Observable,这意味着当执行场景=== null分支时,generateScenario()返回一个Observable&gt;。
如何将其展平并避免返回嵌套的Observable?
答案 0 :(得分:1)
您可以使用RxJS中的各种展平运算符(例如switch
或merge
)将其展平。在这种情况下,switch
似乎最合适:
this.getHistory(category).switchMap(scenario =>
scenario === null ? this.defaultService.getCategory(category, value)
: of(scenario)
);
of
是必需的,传递给.switchMap
的函数必须返回一个Observable被展平/展开/等等。