Javascript является однопоточным (за исключением веб-работников HTML5, которые не связаны с этой проблемой) с очередью событий. Последующий вызов с setInterval()
никогда не начнется, пока не будет выполнен предыдущий вызов. Только один может быть активным одновременно.
Когда наступает время для вашего интервала, внутри механизма JS срабатывает таймер, и событие добавляется в очередь событий javascript. Когда текущий выполняемый поток выполнения JS завершается (и не раньше), механизм JS отправляется и извлекает следующее событие из очереди событий и запускает этот поток выполнения JS. Таким образом, два исполняемых пути в JS никогда не будут перекрываться или продолжаться одновременно. Таким образом, два вызова функций из setInterval () никогда не будут перекрываться. Второй не запустится, пока не закончится выполнение первого.
Но, относительно вашего вопроса, это означает, что два интервала из setInterval()
никогда не будут перекрываться, но если вы делаете асинхронный вызов ajax на таймере первого интервала и запуск вызова ajax заканчивается сразу , и второй интервал срабатывает до того, как первый асинхронный вызов ajax запустит свою функцию завершения, тогда ваши вызовы ajax будут или могут перекрываться.
Если вы хотите предотвратить одновременное выполнение более чем одного вызова ajax, вам придется написать некоторый код, специально предотвращающий это, либо не вызывая второй вызов ajax до завершения предыдущего, либо просто пропуская любой вызов ajax, если предыдущий все еще идет.
См. этот пост для получения дополнительной информации об очереди событий JS и о том, как она работает.