如何取消史诗以避免多个实例

问题描述 投票:1回答:1

我有跟随史诗(顺便说一句.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) )) )) ); }; 将停止以前调用的任何东西。

rxjs redux-observable rxjs6
1个回答
2
投票

dispatch({type:FETCH_ORDERS_CANCELLED})正是您要找的。它将取消先前的observable并发出新值的值。

fetchOrders
© www.soinside.com 2019 - 2024. All rights reserved.