Redux-saga:如何停止或取消任务链?

时间:2018-05-23 12:40:36

标签: redux-saga

有异步增量传奇,3秒后递增计数器

function* incrementAsync() {
    yield call(delay, 3000);
    yield put(counterIncrement());
}

function* incrementAsyncWatcher() {
    yield takeEvery(ASYNC_INCREMENT, incrementAsync);
}

function* incrementCounterSaga() {
    yield fork(incrementAsyncWatcher);
}

const task = sagaMiddleware.run(incrementCounterSaga);

然后我试图阻止这个传奇

task.cancel();

store.dispathch({ type: ASYNC_INCREMENT });

但是3秒后看到传奇仍然有效!

如何阻止这个传奇?

1 个答案:

答案 0 :(得分:2)

我发现显式任务取消可能确实具有挑战性,因为您必须传递和管理任务对象。

相反,我认为这样的模式有效:

function* incrementAsyncWatcher() {
    yield takeLatest(ASYNC_INCREMENT, incrementAsync);
}

takeLatest将取消任务,而takeEvery将创建一个新任务。

您也可以在race的{​​{3}}中查找,以隐式取消