Gram z redux-observable, aby wywołać dwadziałania. Pierwsza akcja była oparta na warunku, gdy jest prawdziwa, a druga akcja powinna zostać uruchomiona za pomocą debounce po 500 sekundach. Oba obserwowalne mogą być uruchamiane równolegle i nie zależą od siebie.
Do tej pory wymyśliłem, co nie działa.
export const updateContent = (content$, { getState }) => {
return content$.ofType(actionTypes.REQ_CHANGE_EDIT)
.flatMap(action =>
Observable.forkJoin(
Observable.if(() => isChanged(getState()),
Observable.of(({ type: actionTypes.CHANGE_EDIT, changed: true }))),
Observable.of({ type: actionTypes.CACHE_CONTENT, isCached: false }).debounceTime(500),
));
};
Odpowiedzi:
0 dla odpowiedzi № 1spróbuj użyć CombineLatest zamiast Forkjoin i wymuś emitowanie wartości początkowej z operatora .if
export const updateContent = (content$, { getState }) => {
return content$.ofType(actionTypes.REQ_CHANGE_EDIT)
.flatMap(action =>
Observable.combineLatest(
Observable.if(() => isChanged(getState()),
Observable.of(({ type: actionTypes.CHANGE_EDIT, changed: true }))).startWith(null),
Observable.of({ type: actionTypes.CACHE_CONTENT, isCached: false }).debounceTime(500),
));
};