Как запустить разные функции setInterval в разные моменты времени? - PullRequest
0 голосов
/ 19 марта 2020

Предположим, у меня есть

let boo = setInterval(() => console.log('boo'), 5000);

Предположим, я хочу добавить еще одну функцию интервала, но хочу убедиться, что она не запускается одновременно:

let bla = setInterval(() => console.log('bla'), 5000);

Is есть способ проверить, когда начнется первый boo интервал, и убедиться, что bla происходит не одновременно, а, скажем, через 2500 мс после boo?

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

но я хочу убедиться, что он не запускается одновременно

Не может. JavaScript запускает один поток внутри области (свободно, страница / вкладка). Этот поток делает только одну вещь за один раз, от начала до конца. Таким образом, даже если эти таймеры срабатывают в ту же микросекунду, задания для выполнения этих обратных вызовов будут go в одной и той же очереди, и они будут обрабатываться потоком по одному за раз.

Если работа выполняется При выполнении обратного вызова таймера запускается асинхронный процесс, второй вызов таймера может появиться после того, как обратный вызов таймера его запустил (и вернул), но во время выполнения асинхронной работы. Если вы хотите предотвратить это, вам придется выполнить некоторую ручную синхронизацию между ними.

Есть ли способ проверить, когда начнется первый интервал бу, и убедиться, что Бла, случается, не в одно и то же время, но, скажем, через 2500 мс после бу?

Я бы, наверное, сделал это, используя один таймер:

let flag = true;
setInterval(() => {
    if (flag) {
        console.log("boo");
    } else {
        console.log("bla");
    }
    flag = !flag;
}, 2500);
0 голосов
/ 19 марта 2020

Вызовите установленный интервал для Bla в установленное время ожидания и укажите время 2500,

let boo = setInterval(() => console.log('boo'), 5000);
setTimeout(()=>{
 let bla = setInterval(() => console.log('bla'), 5000);
 }, 2500);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...