Я не использую redux в своем приложении и использую fetch для вызова сервисов отдыха.
Я думал обрабатывать ответ на вызовы fetch в одном месте вместо дублирования кода.
I попытался сделать следующее в базовом классе:
handleResponse(response, isJson=true, isText=false) {
// const contentType = response.headers.get("content-type");
if (!response.ok) {
// if (contentType && contentType.indexOf("application/json") !== -1) {
if (isJson) {
response.json().then(json => {
return { 'ok': false, 'message': json.message }
}).catch( reason => {
return { 'ok': false, 'message': reason }
})
} else if (isText) {
response.text().then((text) => {
//console.log(error.message);
return { 'ok': false, 'message': text }
}).catch( reason => {
return { 'ok': false, 'message': reason }
});
}
} else {
// if (contentType && contentType.indexOf("application/json") !== -1) {
if (isJson) {
response.json().then((data) => {
return { 'ok': true, 'data': data }
}).catch( () => {
return { 'ok': true, 'data': undefined }
});
} else if (isText) {
response.text().then((data) => {
if (data === "true" || data === "false") {
return { 'ok': true, 'data': data === "true" }
}
return { 'ok': true, 'data': data }
}).catch( () => {
return { 'ok': true, 'data': undefined }
});
}
}
}
и вызвать его таким образом из выборки:
return fetch(url,
{
method: 'POST',
credentials: 'include',
headers: headers
}
)
.then((response) => this.handleResponse(response, true))
.then( (handledResponse) => {
console.log(handledResponse)
return handledResponse
})
// .then((response) => {return response})
и использовать его в компоненте таким образом:
mycall(...).then((res) => {
if (res.ok) {
Но handledResponse
достигает значения undefined, поскольку вызов является асинхронным c и еще не завершился sh.
Есть ли стандарт для обработки ответа выборки? какова лучшая практика?