#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
?