Есть сага на логин и логаут
флоу следующий:
диспатчим 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();
}