@iordania

Почему не выполняется повторно сага?

Есть сага на логин и логаут
флоу следующий:
диспатчим LOGIN_REQUEST - получаем токен - всё в порядке
но если вызвать повторно то сага повторно не запускается
Она повторно запуститься только если задиспатчить LOGOUT
Как это возможно пофиксить ?

import {
  takeEvery,
  takeLeading,
  takeLatest,
  takeMaybe,
  put,
  call,
  all,
  take,
  fork,
  actionChannel,
  cancelled,
  cancel,
} from "redux-saga/effects";
import {
  LOGIN_REQUEST,
  LOGIN_SUCCESS,
  LOGIN_ERROR,
  LOGOUT,
  STOP_LOGING_PENDING,
} from "./type";

import { login, saveToken, clearToken } from "../api/auth";

export function* authorize(username, password) {
  try {
    const token = yield call(login, username, password);

    yield put({ type: LOGIN_SUCCESS, payload: { token } });

    yield call(saveToken, token);
  } catch (error) {
    yield put({ type: LOGIN_ERROR, payload: { error } });
  } finally {
    if (yield cancelled()) {
      yield put({ type: STOP_LOGING_PENDING });
    }
  }
}

export default function* loginFlow() {
  while (true) {
    const { payload } = yield take(LOGIN_REQUEST);
    console.log("loginFlowSaga");
    // fork - не блокирует процесс выполнения
    const task = yield fork(authorize, payload.username, payload.password);
    const { type } = yield take([LOGOUT, LOGIN_ERROR]);

    if (type === LOGOUT) yield cancel(task);
    yield call(clearToken);
  }
}

export function* loginFlowSaga() {
  yield  loginFlow();
}
  • Вопрос задан
  • 30 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы