Рекурсивная выборка / обещание предотвратить тайм-аут при потенциально длительной обработке бэкэнда - PullRequest
0 голосов
/ 30 июня 2018

Когда мой веб-сервер проверяет новые настройки 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>
...