2016-03-31 4 views
1

を置きます高い$と低い$の両方を初期状態にリセットし、プログラムを1回だけ起動します。

const high$ = initialDataBranchOne$.merge(interactiveHigh$); 
const low$ = initialDataBranchTwo$.merge(interactiveLow$); 

これらの両方は、Eventから発せられたinitialDataストリームから来ています。プログラムが正常に実行されている間、combineLatestはうまく動作します。 initialData fromEventが発生したときに、同じ結果を得るにはどうすればよいですか?今すぐプログラムは2回実行されます。

+0

あなたは何を 'initialDataBranch'と明確にできます'interactive'ストリームは?何が働いているのか、何がないのかは不明です。あなたのプログラムが失敗したり、予期しない動作が発生した場合、その動作は何ですか? –

+0

@CalvinBelden initialDataBranchの1つと2つはどちらも、fromEventから起動されたinitialDataストリームからのものです。プログラムはcombineLatestから予期したとおりに動作しますが、必要に応じて動作しません。 – jamesRH

答えて

2

同じオブジェクトにhighlowのプロパティを格納できます。

// Define your default high/low values 
const defaultHighLow = /** **/; 

// Different types of updates/actions 
const highUpdate$ = high$.map(high => ({ high, type: 'UPDATE HIGH' })); 
const lowUpdate$ = low$.map(low => ({ low, type: 'UPDATE LOW' })); 
const resetUpdate$ = reset$.map(high => ({ type: 'RESET' })); 

// Merge all the different types of actions to single stream 
const update$ = Rx.Observable.merge(highUpdate$, lowUpdate$, resetUpdate$); 

// Scan over these updates to modify the high/low values 
const highLowState$ = update$.scan((state, update) => { 
    if (update.type === 'UPDATE HIGH') { 
    return { ...state, high: update.high }; 
    } 

    if (update.type === 'UPDATE LOW') { 
    return { ...state, low: update.low }; 
    } 

    // Return defaultHighLow if reset update is triggered 
    if (update.type === 'RESET') { 
    return defaultHighLow; 
    } 

    // Return state by default 
    return state; 
}, defaultHighLow).startWith(defaultHighLow); 

をそして最後に、我々は以前のように、プログラムの状態を導き出すことができます:様々なイベントがこの状態を更新するために来るよう私たちは、その後、scanを行うことができます

const programState$ = highLowState$.map(hl => program(hl.high, hl.low)); 
+0

私はちょっと分かりましたので、defaultHighLowは状態になり、私のresetUpdate、highUpdate、lowUpdateはdefaultHighLowの値をスキャンで更新しますか? – jamesRH

+0

'defaultHighLow'は' high'と 'low'のためのあなたのアプリケーションのデフォルト値を含みます。リセットの更新が発生するたびに、これらのデフォルト値が返されます。それ以外の場合は、「高」または「低」の値を更新します。それは理にかなっていますか? –

+0

それは動作します!ご協力いただきありがとうございます – jamesRH

関連する問題

 関連する問題