Попытка построить расписание с использованием 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(()=>{});