Как ждать только 1 секунду при выполнении Ajax-запроса, но не отменять запрос после времени ожидания? - PullRequest
0 голосов
/ 25 января 2019

У меня есть ситуация, когда я должен вернуть false, если запрос ajax не возвращается в течение 1 секунды. Но обработайте ответ после того, как запрос был выполнен. Использование тайм-аута Ajax не работает для меня, потому что он отменяет запрос после этого времени. Но я хочу получить ответ, даже если это займет много времени.

Пример:

function call(){
  ajax.request(...)
     if(does not respond in 1 second)
        immediately return false and wait for response
     else
        return response
}

1 Ответ

0 голосов
/ 25 января 2019

Вам нужно настроить гонку между завершением вашего запроса и вашим обработчиком ошибки.Если запрос завершается первым, установите флаг, который вы проверяете перед обработкой ошибки:

function call(){
  let finished = false;
  function callback(){ 
    finished = true 
    // your callback code goes here
  };
  ajax.request(..., callback) // make sure this is an async request
  function handleTimeout() {
    if (finished) return;
    // your timeout code goes here
  }
  setTimeout(handleTimeout, TIMEOUT_IN_MILLISECONDS);
}

в качестве альтернативы установке флага, вы можете отменить тайм-аут .

Обратите внимание, что ваша call функция ничего не возвращает.Вместо этого вы, по сути, обрабатываете события (либо выполнение запроса, либо и то и другое, либо истечение времени ожидания).

...