Я хотел бы знать, как я могу создать настраиваемую обработку ошибок, в которой я бы получил тело разрешенного ответа и передал его пользовательской ошибке в функции выборки.
В моем примере я получил ошибки проверки многих полей в теле ответа. Вот пример:
class ValidationError extends Error {
constructor(resBody, ...params) {
super(...params);
this.name = 'ValidationError';
this.body = resBody.json();
}
}
И это функция выборки:
return fetch(
`${this.formUrl(id)}/status`,
{
method: 'PATCH',
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(jsonBody)
})
.then((res) => {
if (res.ok) {
return res.json();
}
if (res.status === 400) {
throw new ValidationError(res.body);
} else {
throw new Error(`http failed: ${res.status} ${res.statusText}`);
}
});
Который я затем использую в своем компоненте:
.then(() => {
this.setState({navigateTo: '/'})
}).catch(error => {
this.setState({error});
})
Но это не так, поскольку res.body
- это readableStream
в этой точке. Как я могу исправить это, чтобы я мог установить другие error types
на основе response status
в моей функции fetch
, где я мог бы использовать resolved response body
?