Как проанализировать JSON в коде состояния, отличном от 200, в API выборки JS?

#javascript #http-headers

#javascript #http-заголовки

Вопрос:

Мой запрос на выборку выглядит следующим образом —

 fetch(base_url   "/user/details", options)
      .then(response => {
        if (response.ok) {
            return response.json();
        } else {
            throw new Error(response.json().message);
        }
      })
      .then(responseJson => processResponse(responseJson))
      .catch(error => handleError(error));
  

Когда ответа нет ok (в данном случае 400), JSON выглядит следующим образом —

 {"timestamp":"2020-08-27T14:44:21.077176","message":"Failed for some reason."}
  

Однако, когда я пытаюсь получить доступ к приведенному выше ответу (например, так — response.json().message ), я получаю пробел.

Как мне получить доступ к JSON в этом случае?

Ответ №1:

response.json() возвращает обещание

У него не будет message свойства, есть только его разрешенное значение.


 const response = await fetch(base_url   "/user/details", options);
const data = await response.json();
if (response.ok) {
    return processResponse(data);
}
handleError(new Error(data.message));
  

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

1. Это объясняет отсутствующее значение сообщения. Тогда как мне получить к нему доступ?

2. Таким же образом вы обрабатываете любое обещание, возвращаете response.json() , а затем читаете его в следующем then . (Я бы предпочел переписать вещи для использования async / await , поскольку я нахожу, что это облегчает отслеживание).

3. Не могли бы вы, пожалуйста, написать какой-нибудь код, чтобы объяснить это? Я не могу понять, как добавить then в catch ?