У меня есть следующая эпопея (кстати. почему эпопея ?)
const fetchOrders = action$ => {
console.log('fetchOrders', action$);
return action$.pipe(
ofType(FETCH_ORDERS),
mergeMap(action => interval(2000).pipe(
map(_ => ordersReceived(mockOrders()))
))
);
};
, где ordersReceived
- создатель действия, предназначенный для запуска с paylod, mockOrders
возвращает некоторую имитированную полезную нагрузку.
Когда я называю FETCH_ORDERS
экшн, начинается этот эпос, тогда каждые 2 секунды ordersReceived
отправляется, и это нормально. Но когда я снова запустил это действие, я заметил, что ordersReceived вызывается чаще, но я создал несколько экземпляров, которые теперь запускают отдельные действия. Теперь, есть ли способ, которым я мог бы отменить предыдущий эпический вызов?
Редактировать
В документах об отмене я обнаружил, что мне нужно использовать другое действие, на которое отреагирует эпопея, например
const fetchOrders = (action$, state) => {
console.log('fetchOrders', state);
return action$.pipe(
ofType(FETCH_ORDERS),
mergeMap(action => interval(2001).pipe(
map(_ => ordersReceived(cloneOrders())),
takeUntil(action$.pipe(
filter(action => action.type === FETCH_ORDERS_CANCELLED)
))
))
);
};
тогда куда-нибудь позвони dispatch({type:FETCH_ORDERS_CANCELLED})
.
Хорошо, но я думал о чем-то более автономном :), поэтому вызов fetchOrders
остановит все ранее вызванные.