有异步增量传奇,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秒后看到传奇仍然有效!
如何阻止这个传奇?
答案 0 :(得分:2)
我发现显式任务取消可能确实具有挑战性,因为您必须传递和管理任务对象。
相反,我认为这样的模式有效:
function* incrementAsyncWatcher() {
yield takeLatest(ASYNC_INCREMENT, incrementAsync);
}
takeLatest
将取消任务,而takeEvery
将创建一个新任务。
您也可以在race
的{{3}}中查找,以隐式取消