Является ли JavaScript clearInterval асинхронным?

У меня есть код ниже.

var intervalId;

function myCallback() {
    $.ajax({
        url: "http://bla.html",
        cache: false,
        success: function(data) {
            if (intervalId) {
                clearInterval(intervalId);
            }

            if (data && data.result) {
                return;
            }

            alert(data.result);
        }
        , timout: 2000
    });
}

function callInterval() {
    intervalId = setInterval(myCallback, 5000);
}

callInterval();

Проблема в том, что «clearInterval (intervalId)», кажется, не отменяет интервал в это нужное время, потому что предупреждение о сообщении отображается дважды.

Итак, вот мой вопрос, асинхронный ли clearInterval (intervalId)?

Запрос AJAX, вероятно, занимает больше секунды. Почему вы не используете setTimeout?

SLaks 27.12.2018 17:26

Собственно, я использую setTimeout. Я не задавал этого вопроса. Мой интервал выполняется каждые 5 секунд, и я использовал тайм-аут в 2 секунды.

R. Karlus 27.12.2018 17:35

Что ты пытаешься сделать? Я имею ввиду, какова цель? На самом деле нет особого смысла использовать интервал для повторения HTTP-вызова. Я предполагаю, что цель состоит в том, чтобы выполнять http-вызов каждые X секунд, если он еще не запущен, но этот код на самом деле не служит этой цели.

briosheje 27.12.2018 17:36

сообщение отображается дважды, потому что вы очищаете интервал, когда получаете ответ, а не при запуске запроса. Это означает, что во время задержки с момента первого ответа интервал все еще запускает запросы ajax.

quirimmo 27.12.2018 17:37

Извините, ребята, я отредактировал код. Теперь ты можешь мне помочь?

R. Karlus 27.12.2018 17:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
1 032
1

Ответы 1

Дело не в том, чтобы быть синхронизирующим или асинхронным clearInterval.

В вашем коде вы запускаете интервал в первый раз, а затем каждую секунду выполняете свой myCallback.

Очистка интервала при получении ответа означает, что в течение времени, пока выполняется запрос ajax, интервал все еще выполняется и запускает новые запросы ajax.

Ваш ответ краток, но предупреждение отображается несколько раз. Я использовал «дважды», но он отображается столько раз, сколько мой браузер остается открытым.

R. Karlus 27.12.2018 18:00

как я сказал выше, это зависит от того, как вы управляете clearInterval

quirimmo 27.12.2018 18:02

Другие вопросы по теме