首页 > 解决方案 > 如何使用带有参数的 redux-saga 取消当前正在运行的请求?

问题描述

我想在单击按钮时取消 redux saga 中的请求

这里的第一个传奇是从服务器获取数据的传奇

function* fetchData({ payload: a, b, c}) {
  try {
    // ...API call

    action.success(data);
  } catch (e) {
    action.fail(e);
  } finally {
    if (yield cancelled()) yield put(getDataCancelled());
  }
}

然后我有一个按钮,点击它会触发下面的功能。下面的 saga 假设从上面的 fetch 中取消当前正在运行的请求。

function* stopFetchData({ payload }) {
  try {
    const task = yield fork(fetchData);
    // API Call to clean up data from server
    action.cancelSuccess(data);
    yield cancel(task);
  } catch (e) {
    action.cancelFailed(e);
  }
}

export function* fetchDataWatcher() {
   yield takeLatest(SET_DATA, fetchData);
}

但是我的参数有错误,一旦触发,sagas 就会停止工作,因为它正在查找函数的参数。我已经尝试添加参数,结果是,点击获取后,取消。取消触发,但提取仍在继续。

标签: reduxreact-reduxredux-saga

解决方案


推荐阅读