отреагируйте новичок здесь. Я использовал api response fetch и столкнулся с проблемой при попытке выдать настраиваемую ошибку. У меня есть конечная точка api отдыха, работающая на localhost: 8080. С тех пор я отключил процесс (имитируя неработающую службу). Я хочу выдать более описательную ошибку, а не стандартную ошибку «Failed to Fetch». Кажется, что код отклоняет мою ошибку выше и использует ошибку выборки по умолчанию. Есть ли способ отменить это?
fetchData() {
fetch('http://localhost:8080/locales/all')
.then(function(response) {
if (response.ok) {
return response.json();
}
throw Error('Oops, looks like the service is down :-(');
})
.then(parsedJSON => {
this.setState({
locales: parsedJSON.content,
isLoading:false
});
}).catch(error => {
this.setState({
error: error.message,
isLoading:false
});
console.info(error.message); // results in Failed to fetch
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема в том, что первоначальный вызов fetchмай разрешается с помощью объекта Response, но если fetch полностью выйдет из строя, он вообще не разрешится и перейдет непосредственно к catch. Это станет ясно, если вы поместите это в свой код:
fetch('http://localhost:8080/locales/all')
.then(function(response) {
console.info('got a response');
Если вы не видите got a response, вы не сможете передать throw пользовательское сообщение об ошибке внутри .then.
function fetchData() {
fetch('http://localhost:8080/locales/all')
.then(function(response) {
console.info('got a response');
if (response.ok) {
return response.json();
}
throw new Error('Oops, looks like the service is down :-(');
}).catch(error => {
console.info(error.message);
});
}
fetchData();Вместо этого вы можете изменить сообщение об ошибке внутри самого catch:
}).catch(error => {
if (error.message === 'Failed to fetch') {
// change the message, or handle as needed:
error.message = 'Oops, looks like the service is down :-(';
}
function fetchData() {
fetch('http://localhost:8080/locales/all')
.then(function(response) {
console.info('got a response');
if (response.ok) {
return response.json();
}
throw new Error('Oops, looks like the service is down :-(');
}).catch(error => {
if (error.message === 'Failed to fetch') {
error.message = 'Oops, looks like the service is down :-(';
}
console.info(error.message);
});
}
fetchData();Именно так! Он никогда не получает ответа и сразу попадает в ловушку. Спасибо за очень ценную помощь.
Может это сам
fetchвыходит из строя, даже не доходя доthen? Возможно, потому что у IIRC есть проблема с использованиемlocalhost(вам нужно сделать некоторые разрешения).