Угловая реализация 2 наблюдаемых

Я пытаюсь обернуть свою логику с помощью метода реактивного программирования.

У меня есть два зависимых набора данных, которые могут быть или не быть в localstorage. Однако мне нужно вычислить сначала один, а затем второй.

Так что-то вроде этого:

let storageCategories = this.ls.retrieve('categories');
if ( storageCategories ) {
    // Found in localStorage
    this.allCategories = storageCategories;
} else {
    // Send an HTTP API request and fetch categories
    // After request is successful lookup for 'result' in localstorage
    // If result not in localstorage send an HTTP API request
}


// RESULT LOGIC
let storageResult = this.ls.retrieve('result');
if ( storageResult ) {
    // Found in localStorage
    return new BehaviorSubject<any>(this.processResultData(storageResult));
} else {
    // Send an HTTP API request and fetch result
    // If request is successful save in localstorage and return
}

Теперь основная проблема заключается в том, что я не хочу писать логику результата в двух местах: (1) elseв первой ifи (2) После категорий if

Есть ли способ сделать логику результата только в одном месте (кроме записи его в новой функции)?

1 ответ

  1. Из вашего объяснения я сделал вывод. Посмотрите, соответствует ли он вашим стандартам и решает ли вашу проблему. Вот резюме:

    private getCategories(): Observable<any>{
    if(this.categoriesInLs){
      return Observable.of("categories data");
    } else {
      return this.searchService.getCategories();
    }
    }
    
    private getResults(): Observable<any>{
      if(this.resultsInLs){
        return Observable.of("results data");
      } else {
        return this.searchService.getResults();
      }
    }
    
    get(){
      this.getCategories()
      .flatMap(categories => this.getResults())
      .subscribe(r => console.log(r));
    }