Обработка ошибок в redux-thunks делает больше, чем уведомление пользователя - PullRequest
0 голосов
/ 27 февраля 2019

Я видел множество статей и живых примеров обработки ошибок, возникающих в избыточных кодах, путем добавления ACTION_FAIL/ACTION_SUCCESS, а иногда ACTION_ATTEMPT/ACTION_START.Это замечательно, и все, хотя, все, что я видел, похоже, дают пользователю простое уведомление типа "Ой, это пошло не так. Попробуйте еще раз!"и пораньше возвращайтесь домой.

Я ищу случай, когда используется плавный переход dispatch-error-retry-success или, по крайней мере, лучшее (более удобное в обслуживании) решение, чем добавление дополнительных рассылок действий для каждого блока.

Примером может служить истечение срока действия токена.Если токен истекает или произошел сбой из-за истекшего токена (и выход из системы не является хорошим вариантом) , то обновление токена и повторная попытка запроса могут быть решением, не заставляя пользователя поцарапать егоголова.

Мне бы очень хотелось услышать:

  • Как вы справляетесь с провалами из-за редукса?
  • Пробовали ли вы другие альтернативные решения до нынешнего?
  • Если да, почему вы переключились?

1 Ответ

0 голосов
/ 27 февраля 2019

Если вы можете обработать сбой автоматически (как в приведенном выше примере с маркером обновления), вам вообще не нужно отправлять дополнительное действие.Вы можете просто повторить попытку в thunk, а затем отправить успешное действие, если вы успешно восстановились.

function doRequest() {
  return dispatch => {
    makeRequest()
      .catch(error => {
        if (isUnauthorizedError(error)) {
          return refreshToken().then(makeRequest);
        }
        throw error;
      })
      .then(
        doRequestSuccess, 
        doRequestFailure
      );
  }
}

Единственная причина для отправки дополнительного действия «повторить попытку» - это если вы хотите сообщить о временном сбое впользовательский интерфейс.

...