【发布时间】:2018-09-14 15:24:51
【问题描述】:
我有以下史诗(顺便说一句。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 返回一些模拟的payload。
当我调用 FETCH_ORDERS 动作时,这个史诗开始了,然后每 2 秒发送一次 ordersReceived,这很好。但是当我再次触发此操作时,我注意到orderReceived 被更频繁地调用,显然我已经创建了多个实例,这些实例现在触发单独的操作。现在,有什么方法可以取消之前的史诗通话吗?
编辑 我在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 的调用将停止以前调用的任何内容。
【问题讨论】:
-
你能用
switchMap代替mergeMap吗?
标签: rxjs redux-observable rxjs6