Fetch API не работает, только если он не может сделать запрос. И если это возможно, выборка будет выполнена успешно, даже если у нее плохой статус.
Поскольку throw new Error(err)
никогда не вызывался, это будет просто вызов, когда вы попытаетесь проанализировать invalid string content
для объекта json (res.json()
). Я в гостях, в 401 случае ваш сервер возвращает допустимую строку json, такую как {message: "Unauthorized"}
, затем res.json()
работает нормально, и не было ошибок, как throw.
Если вы хотите отловить ошибку http, тогдаhttp status code
из res
объект является правильным способом:
return await fetch(url, options)
.then(res => {
if (res.status >= 300) { // error http status code range
throw new Error(res.status) // throw a error to the catch block
}
return res.json();
})
.catch(err => {
throw new Error(err) // catch and throw to the error of previous `.then` block
})
Затем повторите попытку.