У меня есть код ниже.
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)?
Собственно, я использую setTimeout. Я не задавал этого вопроса. Мой интервал выполняется каждые 5 секунд, и я использовал тайм-аут в 2 секунды.
Что ты пытаешься сделать? Я имею ввиду, какова цель? На самом деле нет особого смысла использовать интервал для повторения HTTP-вызова. Я предполагаю, что цель состоит в том, чтобы выполнять http-вызов каждые X секунд, если он еще не запущен, но этот код на самом деле не служит этой цели.
сообщение отображается дважды, потому что вы очищаете интервал, когда получаете ответ, а не при запуске запроса. Это означает, что во время задержки с момента первого ответа интервал все еще запускает запросы ajax.
Извините, ребята, я отредактировал код. Теперь ты можешь мне помочь?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Дело не в том, чтобы быть синхронизирующим или асинхронным clearInterval.
В вашем коде вы запускаете интервал в первый раз, а затем каждую секунду выполняете свой myCallback.
Очистка интервала при получении ответа означает, что в течение времени, пока выполняется запрос ajax, интервал все еще выполняется и запускает новые запросы ajax.
Ваш ответ краток, но предупреждение отображается несколько раз. Я использовал «дважды», но он отображается столько раз, сколько мой браузер остается открытым.
как я сказал выше, это зависит от того, как вы управляете clearInterval
Запрос AJAX, вероятно, занимает больше секунды. Почему вы не используете
setTimeout?