@AlexVais
Просто кот

Как приостановить действие саги до изменения определенного значения в редаксе?

Есть два запроса в разных сагах, первый запрос, это получение токена, а второй запрос - авторизация. Первым всегда идет запрос на токен. Запрос на авторизцию можно делать только тогда, когда пришел ответ на первый запрос. Как можно приостановить выполнение саги, если ответ на первый запрос ещё не пришел, а пользователь уже нажал на кнопку логина?(условно медленный интернет). Показатель того, что ответ на первый запрос пришел - токен висящий в редаксе. И просле прихода токена, продолжить выполнение.

Ответы на возможные вопросы:
1. Не нужно объединять эти две ссаги в одну
2. Зпросы всегда отправляютс в строго определенном порядке (сначала токен, потом авторизация)
  • Вопрос задан
  • 35 просмотров
Решения вопроса 1
@abberati
frontend-разработчик
У тебя есть какой-то экшен, в ответ на который редьюсер кладёт токен в стор. Во второй саге ты можешь поставить её (сагу) на паузу до диспатча этого экшена

const actionWhereTokenReceived = yield take(ACTION_TYPE)

Код остановится на этой строке и возобновится, когда будет задиспатчен экшен с нужным типом. В константу упадёт сам экшен с токеном.

UPD: Если эту вторую сагу нужно вызывать и после получения токена, то очевидно, что она остановится навсегда (вернее пока не произойдёт диспатч, который может больше никогда не произойти). В таком случае можно сделать так:

let token = yield select(state => state.path.to.token)

if (!token) {
  const actionWhereTokenReceived = yield take(ACTION_TYPE)
  token = actionWhereTokenReceived.payload
}

...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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