2017-02-15 11 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

Есть много способов, вы можете осуществить это , следует использовать коммутационную карту, которая содержит ваше состояние:

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