Redux-saga任务取消

时间:2018-05-09 20:46:41

标签: javascript reactjs redux redux-saga

我很难将此任务取消。它在一个小循环中,如果我在函数底部的累加器中使用takeLatest,它运行正常。没有任何反应/如果我使用flowControltake函数似乎无法运行。

取消操作会触发,但任务仍在运行 - 这是使用while的问题吗?这是我没有看到的另一个问题吗?

如果问题在于使用页面底部的*appRoot导出此流,那么如何正确地将流控制包含到React / Redux存储中?

function* install() {
  const items = list.length - 1; // total number of things to call
  let count = 1;

  while (count < items) {
    const response = yield call(() => Promise.resolve(list[count]));
    if (response && !response.error) {
      yield put({type: LOAD_ITEM_SUCCESS, item: response.data});
      console.log('success, created new item', response.data);
    }
    yield delay(5000);
  }
}

export function* flowControl() {
  while ( true ) {
    // starts the task in the background
    const task = yield fork(install);
    // wait for the user stop action
    yield take(CANCEL_ACTION, cancelInstall, task);
  }
}

function* cancelInstall(task){
  yield cancel(task);
}


export default function* appRoot() {
  yield all([
    takeLatest(LOAD_ITEMS, flowControl)
  ]);
}

其他人更新后橡胶鸭子:

  • 问题1:flowControl内的while循环不可伪造,因此它永远运行
  • 问题2:take无法按预期工作,但将其替换为takeLatest会正常触发取消功能。

虽然present in the demoswhile循环没有可证伪的状态,所以它只是......运行。一堆!我不确定原因,但删除FlowControl,同时将取消take替换为takeLatest会使此流程按预期工作。

1 个答案:

答案 0 :(得分:0)

take收到一个参数。

重试此更改:

false