Классическая вещь, которую нужно сделать здесь, это повторить операцию, потому что сетевая связь может быть ненадежной, особенно на мобильных устройствах. Но переходные процессы 404 - это другая проблема, и они указывают на проблему с веб-сервером, которая может потребовать отдельной диагностики. (Например: если это кластер веб-серверов, действующих как одна конечная точка, один из них может быть неправильно настроен и, следовательно, не найдет ресурс, который могут найти остальные).
Но для кратковременных сбоев классическая вещь - это повтор:
function fetchJSONWithRetry(input, init, retries = 10) {
return fetch(input, init)
.then(function(response) {
if (response.ok) {
return response.json();
}
throw new Error('Network response was not ok'); // I usually use `new Error("HTTP status " + response.status)`
})
.catch(error => {
if (retries <= 0) {
throw error;
}
return fetchJSONWithRetry(input, init, retries - 1);
});
}
используется так:
fetchJSONWithRetry('/category/somepage', {
credentials: 'same-origin',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(app.addAntiForgeryToken(postData))
})
.then(result => {
if (result.Status === 'OK') {
// ...
}
})
.catch(error => {
// All retries failed, handle it
});
(input
и init
- это имена , используемые в спецификации для fetch
, так что я использовал это выше.)