Как проверить наличие ошибок / ошибок для сообщения API в React Saga

#javascript #reactjs #api #http #react-redux

#javascript #reactjs #API #http #react-redux

Вопрос:

У меня есть форма на странице, и при заполнении полей я нажимаю отправить. Он вызывает Post API для серверной части. Я также ожидаю некоторого ответа от вызова API. Я пытаюсь выяснить, как различать успешный ответ и ответ с ошибкой.

например, для успеха я получаю следующий ответ.

 {
  "data": {
    "attributes": {
      //These are the fields and i display the field values on the page
      "age": 32,
      "sex": 'male'
    }
  }
}
  

В случае сбоя при выполнении вызова API я получаю ответ ниже

 {
  "errors": [
    {
      "status": "401",
      "title": "Unauthorized request"
    }
  ]
}
  

Даже если есть какие-либо другие причины сбоя, например Unauthorized access , или Internal server error , я буду получать соответствующие «статус» и «заголовок» в errors массиве, как показано выше.

Как я могу определить, является ли ответ успешным или неудачным, и если это сбой, как мне проверить, какой статус сбоя возвращается. Может кто-нибудь, пожалуйста, помочь в понимании этого.

Ответ №1:

Вы можете добавить еще 2 действия — одно для успеха, а другое для сбоя.

В функции Saga * добавьте блок try-catch. В try после команды вызова Api post вы можете запросить успешное действие. В catch вы можете запросить действие сбоя.

 try {
  const result = yield call(axios.POST, ....) // API Post call
  yield put(actions.successAction(result))
} catch(error) {
  yield put(actions.failAction(error))
}
  

Комментарии:

1. я понял эту часть. я не понимаю ту часть, где я могу выяснить, был ли ответ успешным или это был ответ на сбой

2. Получается ли, что все успешные вызовы API выполняются в блоке try, а все сбои в вызове API попадают в блок catch?

3. правильно. успешный вызов api будет в try, а сбой — в catch.