2017-02-15 45 views
2

对于下面的打字稿(使用rxjs):有条件链观察到

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

getAlternateData(): Observable<MyData> { 
    return WS.loadAlternateData(); 
} 

如何一种新的方法来实现,以满足以下伪代码:

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. 
} 

回答

5

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

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