clearInterval мешает запускать setInterval

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Misa, 22 мар 2019.

  1. Misa

    Misa Нуб

    Здравствуйте. Пытаюсь настроить функцию setInterval, сама по себе она работает, но стоит только после неё поставить clearInterval, то setInterval даже не запускается. Самый простейший пример с Espruino.com и тот не работает. Срабатывает только если закомментировать вторую строку.
    В чем может быть проблема? Я что-то делаю не так?
    Перед работой прошил свою Iskra JS последней прошивкой.
    Код (Javascript):
    var id_f = setInterval(function () { print('foo'); }, 1000);

    clearInterval(id_f);
     
  2. ИгорьК

    ИгорьК Гуру

    Смотри, интерпретатор последовательно выполняет инструкции, первая строка:
    1. установить таймер и через секунду напечатать "foo" - установил, время пошло, через секунду будет напечатано.

    Вторая строка, выполняем следующую инструцию:
    2. Сбросить этот таймер - выполнил, сбросил.

    Когда же ему успеть напечатать "foo"? Скрипт только устанавливает да тут же сбрасывает таймер.
     
    Последнее редактирование: 22 мар 2019
    sys и arkadyf нравится это.
  3. Asper Daffy

    Asper Daffy Иксперд

    Откуда видно, что не запускается? Запускается и нормально исполняется. Просто если дать последовательность команд "стой там, иди сюда", всегда кажется. что первая не исполняется.
     
    parovoZZ и ИгорьК нравится это.
  4. Misa

    Misa Нуб

    Разобрался, благодарю за ответы.
    Проблемы крылась в неточном понимании значений этих методов.
    setInteravl исполняет функцию, только выждав заданное время,
    clearInterval нужно привязать к какому-то событию или загнать в setTimeout, чтобы отложить исполнение
     
  5. ИгорьК

    ИгорьК Гуру

    Типа того. Но в целом у JavaScript логика построения программы другая, нежели в Си.
     
    arkadyf нравится это.
  6. b707

    b707 Гуру

    в данном случае, думается, аналогичный кусок на Си работал бы (а точнее - "не работал бы") - так же
     
  7. ИгорьК

    ИгорьК Гуру

    А вы сможете этот код повторить на Си?
     
  8. Asper Daffy

    Asper Daffy Иксперд

    А что, там есть какие-то проблемы? Функцию отдельно - ещё и читабельнее выйдет, а по сути также. А если ++, то можно и практически в точности также. Только зачем? Никогда не понимал увлечения лямбдами ради лямд. Есть тут один деятель - прочитал где-то, что в С++ лямбды есть, так теперь пихает их во все дыры.