Показать сообщение отдельно
  #1 (permalink)  
Старый 25.06.2022, 11:30
Аспирант
Отправить личное сообщение для Volonter Посмотреть профиль Найти все сообщения от Volonter
 
Регистрация: 18.01.2011
Сообщений: 84

Ajax, setTimeout и время ответа сервера
Всем привет, озадачился вот каким вопросом, как правильно и грамотно сделать, чтобы установленный setTimeout отрабатывал корректно. Суть в следующем: есть функция loaddata() подгрузки контента по клику на кнопку, там обычный Jquery Ajax, который понятное дело асинхронный. async false использовать не хотелось бы, и вызов этой функции
loadMoreBtn.on('click', function() {
    loadMoreBtn.html(btn_content_load)// меняем содержимое кнопки на спиннер
    setTimeout(() => {
        loaddata();
        loadMoreBtn.html(btn_content_default)// возвращаем дефолтное содержимое кнопки
    }, 400)
});

loaddata(); запрашивает с бека данные, в кнопке крутится колесико загрузки, по истечении таймаута отображается контент и кнопка принимает свой обычный вид - текст "Загрузить еще"
Проблема в том, что если на бэке замедлить время ответа сервера больше, чем на таймауте
usleep(550000); например, то естественно мы сначала увидим, что колесико загрузки пропало, в кнопке появилось "Загрузить еще" и через какое то время подъехал контент. Понятно, что специально я сервер засыпать заставлять не буду, но что если по какой то причине ответ сервера будет дольше, тем в таймауте? Как грамотно все это сконнектить, чтобы пока не пришел ответ колесико крутилось, даже если таймаут уже истек, и, если ответ пришел раньше, то все завершилось по таймауту. Надеюсь объяснил понятно.
Заранее спасибо!
Ответить с цитированием