Try catch
не сможет обработать ошибку, которая генерируется асинхронно (т. Е. В обещании), для этого необходимо использовать .catch()
.
JSfiddle
function someFunc() {
return new Promise((resolve, reject) => {
fetch(URL, {method: METHOD, body: BODY})
.then((res) => res.json())
.then((json) => {
resolve(json);
})
.catch((err) => {
reject(err);
})
});
}
someFunc()
.then((value)=>{})
.catch((err)=>{console.log(err)})
Edit:
Когда сервер отвечает без json
, но с ошибкой, ваше возвращенное обещание будет rejected
. Поэтому вы должны убедиться, что вы вызываете .catch()
при вызове функции (то есть someFunc().catch(()=>{})
). Эта ошибка появляется, если вы оставили необработанное обещание необработанным (без улова).
Edit2: Упс. Извините, неправильно прочитал ваш вопрос, но я думаю, что объяснение остается тем же.
Если res
не имеет метода json()
, он вызовет следующую ошибку при вызове res.json()
::
Uncaught TypeError: res.json() is not a function
Этот error
будет пойман вашим .catch()
блоком. Теперь блок catch будет возвращать новое отклоненное обещание. При вызове функции и отсутствии catch()
для обработки запроса будет выдана ошибка, о которой вы говорите.
Я объяснил немного больше здесь .