使用RXJS驱动';活动';光
我有一个“db doing stuff”主题,它为“正在保存”/“不再保存”输出true/false。这是在对象保存的“开始”和“结束”阶段发生时发生的 我想用它来驱动一个显示三种状态的UI符号:使用RXJS驱动';活动';光,rxjs,Rxjs,我有一个“db doing stuff”主题,它为“正在保存”/“不再保存”输出true/false。这是在对象保存的“开始”和“结束”阶段发生时发生的 我想用它来驱动一个显示三种状态的UI符号: 闲散 拯救 完成 我想: “空闲”将在无任何事情发生时显示(默认状态) “正在保存”以立即显示主题输出“true”。只要保存操作正在进行,就应该是这种情况 “完成”将在主体发出“false”(不再保存)后出现,持续1s1s过后,将出现Idle(空闲) 保存/完成保存对象时,我的现有主题输出tr
- 闲散
- 拯救
- 完成
- “空闲”将在无任何事情发生时显示(默认状态)
- “正在保存”以立即显示主题输出“true”。只要保存操作正在进行,就应该是这种情况
- “完成”将在主体发出“false”(不再保存)后出现,持续1s1s过后,将出现Idle(空闲)
当前正在使用rxjs-5.5如果您的activity light UI是唯一需要以这种方式解释流的东西,您可以在订阅中处理它:
myDbActivityFunction()
.subscribe((isDbActive: boolean) => {
if(isDbActive) {
myUiState = 'Saving';
}
else {
myUiState = 'Done';
Observable.interval(1000).take(1)
.subscribe(x => { myUiState = 'Idle';});
//you could replace the above two lines with a setTimeout function
}
});
如果您想继续下一步,更为有效的方法是将数据源(例如数据库状态回调)转换为可观察的流,以您想要的方式发送数据,而不是使用订阅中的逻辑来管理数据。我们需要更多关于您的数据库服务的信息来了解这一点。谢谢您的帖子。我有一个非常简单的DB包装器,它在保存开始时发出“true”,保存完成时发出“false”,然后发出“true”(暂时忽略错误)。那还不是一条可以观察到的河流吗?e、 g:它会这样做。保存通知。下一步(SavingState.StartedSaving);当我开始思考直接从可见光发射三种状态的想法时,它使用了枚举。然后我在这里问:)这就是:(SchedulerDatabase类),出于兴趣。@NeilClayton我看了一眼。您的方法很好,但解释了为什么使用
.next()
强制推动排放不是惯用的RxJS。理想情况下,您应该包装您的异步调用(例如,db.get()
)以返回完整的观察值,然后将它们组合/合并到您的UI订阅的聚合流中。这样,您就可以订阅有限的流,而不必担心取消订阅。另外,您的排放不是副作用,而是返回返回给调用组件/UI.Right的值。这很有道理,谢谢你指出这一点。到时候我会有另一个裂缝的。