Rxjs 如何取消epic以避免多个实例
我有以下史诗(顺便说一下?) 其中,Rxjs 如何取消epic以避免多个实例,rxjs,redux-observable,rxjs6,Rxjs,Redux Observable,Rxjs6,我有以下史诗(顺便说一下?) 其中,orderseceived是一个操作创建者,它将与paylod一起运行,mockOrders返回一些模拟负载 当我调用FETCH\u ORDERS操作时,这个史诗开始,然后每隔2秒ordersReceived就被发送一次,这很好。但是,当我再次启动此操作时,我注意到ordersReceived被调用的频率更高,很明显,我创建了多个实例,这些实例现在启动单独的操作。现在,有没有办法取消之前的epic通话 编辑 我在中发现,我必须使用史诗将作出反应的另一个动作,例
orderseceived
是一个操作创建者,它将与paylod一起运行,mockOrders
返回一些模拟负载
当我调用FETCH\u ORDERS
操作时,这个史诗开始,然后每隔2秒ordersReceived
就被发送一次,这很好。但是,当我再次启动此操作时,我注意到ordersReceived被调用的频率更高,很明显,我创建了多个实例,这些实例现在启动单独的操作。现在,有没有办法取消之前的epic通话
编辑
我在中发现,我必须使用史诗将作出反应的另一个动作,例如
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\u ORDERS\u CANCELLED})
这很好,但我在想一些更自动的东西:)因此对fetchOrders
的调用将停止以前调用的任何东西。就是您要寻找的。它将取消以前的可观测值,并发出新的值
const fetchOrders = action$ => {
console.log('fetchOrders', action$);
return action$.pipe(
ofType(FETCH_ORDERS),
switchMap(action => interval(2000).pipe(
map(_ => ordersReceived(mockOrders()))
))
);
};
您是否可以尝试使用
开关映射
而不是合并映射
?
const fetchOrders = action$ => {
console.log('fetchOrders', action$);
return action$.pipe(
ofType(FETCH_ORDERS),
switchMap(action => interval(2000).pipe(
map(_ => ordersReceived(mockOrders()))
))
);
};