Когда мой веб-сервер проверяет новые настройки Wi-Fi, проверка заканчивается быстро, если учетные данные в порядке, но занимает некоторое время, если их нет. Я хотел бы задержать пользователя на как можно более короткое время, когда проверка прошла успешно, и не допустить тайм-аута браузера, если это займет больше времени.
Я нашел пример рекурсивных вызовов извлечения / обещания, которые, кажется, должны работать, но это не так.
Кто-нибудь видит, чего мне не хватает?
<html><head>
<script>const fetchWithRetry = (ThisURL) => {
let abort = false;
const options = {
url: ThisURL,
options: {},
cancel: {},
retries: 30,
retryDelay: 1000
};
// Add an abort to the cancel object.
cancel.abort = () => { abort = true };
// Abort or proceed?
return abort ? Promise.reject('aborted') : fetch(options.url).then(response => {
// Reject because of abort
return abort ? Promise.reject('aborted')
// Response is good
: response.ok ? Promise.resolve(response.text())
// Retries exceeded
: !options.retries ? Promise.reject('retries exceeded')
// Retry with one less retry
: new Promise((resolve, reject){
setTimeout(() => {
// We use the returned promise's resolve and reject as
// callback so that the nested call propagates backwards.
fetchWithRetry({ ThisURL, retries: retries - 1 }).then(resolve, reject);
}, options.retryDelay);
});
});
}</script>
<title>'Verifying WiFi Settings'</title>
</head>
<body onload="fetchWithRetry('/WiFiValid')">
<h1>Please wait while WiFi settings are verified</h1>
</body>
</html>