同じオブジェクトにhigh
とlow
のプロパティを格納できます。
// 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));
あなたは何を 'initialDataBranch'と明確にできます'interactive'ストリームは?何が働いているのか、何がないのかは不明です。あなたのプログラムが失敗したり、予期しない動作が発生した場合、その動作は何ですか? –
@CalvinBelden initialDataBranchの1つと2つはどちらも、fromEventから起動されたinitialDataストリームからのものです。プログラムはcombineLatestから予期したとおりに動作しますが、必要に応じて動作しません。 – jamesRH