#rxjs #race-condition #redux-observable #cancellation
#rxjs #состояние гонки #redux-observable #отмена
Вопрос:
В примерах отмены redux-observable official doc мы сначала фильтруем поток действий action $ по типу, а затем выполняем ajax-вызов с потоком действий другого типа. Я не понимаю, как может быть возможно, чтобы действие $ типа FETCH_USER_CANCELLED проходило через первый фильтр OfType (FETCH_USER).
Вот пример
const fetchUserEpic = action$ => action$.pipe(
ofType(FETCH_USER),
mergeMap(action => race(
ajax.getJSON(`/api/users/${action.payload}`).pipe(
map(response => fetchUserFulfilled(response))
),
action$.pipe(
ofType(FETCH_USER_CANCELLED),
map(() => incrementCounter()),
take(1)
)
))
);
Почему нам не нужен ‘FETCH_USER_CANCELLED’ при первом фильтре OfType?
action$.pipe(
ofType(FETCH_USER, FETCH_USER_CANCELLED),
...
Было бы благодарно, если бы кто-нибудь мог объяснить.
Ответ №1:
В приведенном выше примере вы используете нефильтрованный action$
поток дважды. ofType(FETCH_USER)
Фильтр применяется только к последующим операторам в pipe
(он же mergeMap
после него).