В моем сценарии пользователь может выкупить ваучеры. Пока она не вошла в систему, она все равно может протестировать функцию выкупа, чтобы понять, как она работает.
У меня есть 2 потока, notLoggedInRedeemFlow
для случая, когда она не авторизована и loggedInRedeemFlow
в случае, если она авторизована.
У меня есть корневая сага, которая должна запускать один поток и останавливать другой в зависимости от состояния входа пользователя.
Я придумал использовать гонку между одним потоком и действием cancellation
для этого потока.
При запуске приложения notLoggedInRedeemFlow
активен, и он должен заканчиваться, когда пользователь входит в систему.
Затем запускается loggedInRedeemFlow
и работает до тех пор, пока пользователь не выйдет из системы.
function* redeemFlows() {
while (true) {
const result = yield race({
fake: call(notLoggedInRedeemFlow),
gotAccessToken: take([accountActions.LOGIN_SUCCESS, accountActions.START_SIGNUP_SUCCESS]),
})
yield race({
run: call(loggedInRedeemFlow, result.gotAccessToken.payload.access_token),
logout: take(accountActions.LOGOUT_SUCCESS),
})
}
}
Мои вопросы: лучший ли это способ справиться с таким сценарием в редукс-сагах?