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

时间:2018-09-14 15:24:52

标签: rxjs redux-observable rxjs6

我已经关注了史诗(顺便说一句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的调用将停止以前调用的任何内容。

0 个答案:

没有答案