rxjs:重置为流,只得到一个输出
rxjs: reset to streams and only get one out put
我有两个单独的流,它们组合在一起。最新内容如下:
const programState$ = Rx.Observable.combineLatest(
high$, low$,
(high, low) => {
return program(high, low);
});
这很好用,但我也希望能够将高$和低$重置为初始状态,并且只启动一次程序。这些看起来如下:
const high$ = initialDataBranchOne$.merge(interactiveHigh$);
const low$ = initialDataBranchTwo$.merge(interactiveLow$);
这两个都来自initialData流,该流是从Event中激发的。当程序正常运行时,combineLatest工作得很好。当initialData from Event被激发时,我如何才能获得相同的结果?现在程序运行两次。
我们可以将high
和low
属性存储在同一个对象中。然后,我们可以在各种事件进入时执行scan
来更新此状态:
// 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);
最后,我们可以导出以前的程序状态:
const programState$ = highLowState$.map(hl => program(hl.high, hl.low));
相关文章:
- 一个ajax循环有两个输出错误innerHTML
- 在量角器中创建一个.txt错误输出文件是手动的,而不是控制台错误
- Javascript未在其中一个变量上输出0
- 它在另一个函数中嵌套后不会输出文本
- 如何只输出一个SQL结果
- 从一个文本框执行代码,并在另一个文本框中以 HTML 显示输出
- 从引导程序图标十六进制值输出一个符号
- 如何强制 jsonStringify 输出一个不带引号的数组
- Angularjs,从json对象输出一个字符串或一个字符串数组
- Breeze 敲除值绑定输出一个函数
- 输出一个结果数组,其中包含给定数组的唯一元素的分组计数
- AngularJs过滤到单个数组元素并输出一个属性
- 如何让Babel输出一个文件's AST
- 如何创建一个javascript函数,输出一个带有object's属性列表的对象列表
- 不能输出一个简单的javascript结果
- 如何用jquery输出一个span到一个li
- Webpack构建更少的文件输出一个CSS最小化文件
- 输出一个包含姓名和平均分的表
- 我如何从js输出一个变量的html
- Ajax函数输出一个"0"当我在最后使用die()时