2016-09-29 10 views
0

私はリアクティブプログラミング方法を使用してロジックをラップしようとしています。角2オブザーバブルの実装

ローカルストアにあるかどうかに依存する2つの依存データセットがあります。しかし、私は最初に計算し、次に計算する必要があります。

したがって、このような何か:カテゴリ後最初のifの(1)else及び(2):

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 
} 

は今基本的な問題は、私は2つの場所で結果ロジックを記述したくないですif

結果ロジックを(新しい関数に書き込む以外の)1か所だけにする方法はありますか?

+0

2番目の 'storageResult'では、' storageCategories'のelseと同じエンドポイントにhttp要求をしていますか? – lbrahim

+0

いいえ、storageResults HTTPリクエストは別のAPI呼び出し用です。だから明確にするために:私は最初にカテゴリをチェックする必要があります。それらがローカルストレージで使用可能な場合、それらの値が使用されます。そうでなければ、カテゴリに対するAPIへのリクエストが送信されます。どちらの場合でも、私はlocalstorageの 'results'値をチェックしなければなりません。それが存在する場合はそれを使用します。それ以外の場合は、別のAPI呼び出しを使用して結果を収集するAPI要求を送信する必要があります。これらの呼び出しは非同期であるため、ネストされたコールバックの混乱を避けようとしており、RxJSメソッドを使用してコードを記述したいと考えています。もう少し質問を明確にすることを願っています。 – Hassan

+0

下の私の答えをチェックしてください。 – lbrahim

答えて

0

あなたの説明からplunkr hereを作成しました。それがあなたの基準を満たし、あなたの問題を解決するかどうかを見てください。

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)); 
} 
+0

ありがとうイブラヒム! - 私はそれをテストし、あなたに知らせる:)私はObservable.ofメソッドを知らなかった。だから、基本的に依存関係を壊して別のメソッド( 'get()'で再結合しています)。ニースアプローチ:) – Hassan

+0

あまりにも1つのルーチンで行うことができたが、それは醜いだろう – lbrahim

関連する問題