Angular / Rxjs条件嵌套Observable

时间:2017-12-11 21:08:17

标签: angular rxjs

我最近转换了一个函数来动态地从磁盘而不是内存中检索数据,并且在此过程中从同步返回变量到返回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?

1 个答案:

答案 0 :(得分:1)

您可以使用RxJS中的各种展平运算符(例如switchmerge)将其展平。在这种情况下,switch似乎最合适:

this.getHistory(category).switchMap(scenario =>
  scenario === null ? this.defaultService.getCategory(category, value)
  : of(scenario)
);

of是必需的,传递给.switchMap的函数必须返回一个Observable被展平/展开/等等。