我有跟随史诗(顺便说一句.why epic?)
const fetchOrders = action$ => {
console.log('fetchOrders', action$);
return action$.pipe(
ofType(FETCH_ORDERS),
mergeMap(action => interval(2000).pipe(
map(_ => ordersReceived(mockOrders()))
))
);
};
其中qazxsw poi是一个意图与有效载荷一起运行的动作创建者,qazxsw poi返回一些模拟的有效载荷。
当我打电话给ordersReceived
动作这个史诗开始然后每隔2秒mockOrders
被派遣,那很好。但是,当我再次解雇这个动作时,我注意到ordersReceived被更频繁地调用,显然我创建了多个实例,现在可以触发单独的动作。现在,有没有办法可以取消之前的史诗电话?
编辑我在FETCH_ORDERS
中发现,我必须使用史诗会做出反应的另一个动作,例如
ordersReceived
然后某处叫docs about cancellation。
这很好,但我正在考虑更自主的东西:)所以调用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})
正是您要找的。它将取消先前的observable并发出新值的值。
fetchOrders