Я изо всех сил пытаюсь представить пример использования в разработке веб-приложений, которому необходимо использовать setInterval
.Используется для setInterval, который не может быть достигнут с помощью setTimeout или RAF?
«Опасность» с setInterval
заключается в том, что он просто ставит очередь на обратные вызовы, если один из них не завершен в течение выделенного интервала.
Кроме того, поведение setInterval
может быть смоделировано с помощью setTimeout
или requestAnimationFrame
без этой «опасности».
Учитывая это, может ли кто-нибудь предоставить мне прецедент, где setInterval
является лучшим/более подходящим вариантом?
Edit:
думал, что я записывал свои выводы.
setInterval
- это простой способ, чтобы что-то работало с интервалами равномерного. Интервалы будут в основном достаточно точными, но если цикл событий заблокирован, они могут быть полностью неточными.
var x = 0;
setInterval(function() {
waitBlocking(5000);
document.write(x++);
},100);
function waitBlocking(ms) {
var start = Date.now();
while((Date.now() - start) < ms) {}
}
Насколько я могу судить, setInterval
полезно не, если вы хотите равномерно распределить интервал вызовы обратного вызова (см выше), но если вы хотите удобный способ иметь определенное количество обратные вызовы в течение периода, распространяющиеся по таймфрейму как можно ближе к тому, когда они должны были запускаться. Это кажется довольно узким прецедентом.
Уверен, что у меня что-то не хватает.
Edit 2:
В основном это наилучшее приближение часов JS можно достичь, так что я думаю setInterval
это «таймер часы». Предположительно, это было полезно в приложениях, которым нужны простые часы.
Я бы не согласился с тем, что эта функциональность является «опасностью» для 'setInterval'; это особая функция и полезна в ситуациях, когда вы хотите, чтобы ваши обратные вызовы выполнялись по определенному графику, который не зависит от того, как долго выполняется обратный вызов для выполнения. – Hamms
Будучи однопоточным, он не является независимым, но я принимаю ваше решение. – Ben
«то, что он просто ставит очередь на обратные вызовы, если он не завершен в течение выделенного интервала». --- Это не совсем так. В очереди поставлен только один дополнительный вызов. Преимущество 'setInterval' в том, что вам не нужно вручную управлять следующим вызовом (иначе вы испортите свой код для домена с настройкой' setTimeout'). Нельзя сказать, что не всегда это анонимная функция, которую вы можете легко взломать, а ссылку на функцию из переменной. – zerkms