有条件的链可观察

Hut*_*tch 4 javascript reactive-programming observable rxjs typescript

对于以下TypeScript(使用rxjs):

getRegularData(): Observable<MyData> {
    return WS.loadRegularData();
}

getAlternateData(): Observable<MyData> {
    return WS.loadAlternateData();
}
Run Code Online (Sandbox Code Playgroud)

如何实现新方法以满足以下伪代码:

getData(): Observable<MyData> {
    // try to use getRegularData, and return observable for result.
    // if getRegularData returns null, get data from getAlternateData()
    // instead and return observable for result.
}
Run Code Online (Sandbox Code Playgroud)

ols*_*lsn 14

有很多方法可以实现这个,一个是使用包含你的条件的switchMap:

getData(): Observable<MyData> {
    return getRegularData()
        .switchMap(data => {
            if (data != null) {
                return Observable.of(data);
            } else {
                return getAlternateData();
            }
        });
}
Run Code Online (Sandbox Code Playgroud)