Redux-saga: Как остановить или отменить цепочку задач? - PullRequest
0 голосов
/ 23 мая 2018

Имейте асинхронное увеличение саги, счетчик приращения которого через 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 голосов
/ 19 июня 2018

Я обнаружил, что явное отмена задачи может быть действительно сложной задачей, так как вы должны передать объект задачи и управлять им.

Вместо этого я подумал, что сработали такие шаблоны:

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

takeLatest отменит задачу, а takeEvery создаст новую задачу.

Вы можететакже ищите документы для race, чтобы неявно получить отмену

...