我已经关注了史诗(顺便说一句why epic?)
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被调用的频率更高,很明显,我创建了多个实例,这些实例现在可以触发独立的动作。现在,有没有办法可以取消以前的史诗般的通话?
编辑 我在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})
。
很好,但是我在想一些更自动的名称:),因此对fetchOrders
的调用将停止以前调用的任何内容。