代码之家  ›  专栏  ›  技术社区  ›  mdmb

Redux thunk和axios-请求取消

  •  0
  • mdmb  · 技术社区  · 6 年前

    我有一个应用程序 redux-thunk , redux-pack axios 在船上。

    我的行为是这样的:

    export const getEntities = () => (dispatch, getState, { api }) => {
      return dispatch({
        type: ENTITIES_LOAD,
        promise: api.getEntities(),
        meta: {},
      });
    };
    

    我叫他们进来 componentDidMount .

    我的问题是-取消这些操作以及请求本身的最佳方式是什么?我读过 Cancel Token 那个 轴心 使用,但是我应该如何先取消操作?

    1 回复  |  直到 6 年前
        1
  •  0
  •   mdmb    6 年前

    我发现自己用cancel令牌取消了请求。一种解决这个问题的方法,但是我将它们附加到一个全局变量(比如 window ),因此每次发出请求时,都会将新令牌添加到对象中(使用其自己的密钥),每次请求完成时,都会删除该密钥。

    因此,我在应用程序的客户端部分提供了类似的内容:

    window.cancellationTokens = { myOwnTokenKey: theActualToken }
    

    如果需要取消请求(例如,用户离开在其上获取数据的路由 componentDidMount ),我只想:

    cancelRequest(nameOfTheKey);
    

    调用的函数 cancelRequest 接受一个参数,即请求的实际键,如下所示:

    const cancelRequest = (keyName) => {
        if (typeof window === 'undefined') return;
        const cancelMethod = window.cancellationTokens[keyName];
        if (!cancelMethod) return;
        cancelMethod();
    }
    
        2
  •  -2
  •   gadi tzkhori    5 年前

    也许你应该考虑加入redux传奇,让动作取消变得简单。 查看文档 https://redux-saga.js.org/