尝试使用 RxJS v5 构建计划,其中某些事件可以触发计划重新加载。当前使用 3 个源 - schedule$、event$ 和 userNotification$(示例如下)。
我已经尝试了许多不同的策略,并且当 reloadSchedule 事件时间命中时,我一直很奇怪,比如递归重新加载。有没有办法让下游数据 (event$) 干净地触发上游 (schedule$) 重新加载,而不会有任何动作/通知从以前的计划项目中挥之不去?
schedule$ = new Rx.BehaviorSubject(
{schedule:[
{start:'1pm', end:'2pm', action:'sayhi'},
{start:'2pm', end:'3pm', action:'sayhi'},
{start:'3pm', end:'3pm', action:'reloadSchedule'},
{start:'3:01pm', end:'4pm', action:'sayhi'},
]}
);
function loadSchedule(){
somethingAsync.then((moreData)=>schedule$.next(moreData));
}
event$ = schedule$.flatMap((data)=>{
return Rx.Observable
.from(data.schedule)
.flatMap((event)=>{
return Rx.Observable.timer(event.start)
.flatMap(()=>{
// do actions here once previous actions/notifications finish
if(event.action === 'reloadSchedule'){
loadSchedule()
}
return Rx.Observable.of(someUserMessage);
})
})
})
userNotification$ = Rx.Observable.timer(1000).withLatestFrom(event$)
.flatMap((someUserMessage)={
// fade message after 5 seconds
});
userNotification.subscribe(()=>{});