прервать выполнение javascript внутри временного цикла

как разорвать временной цикл внутри for? Я пробовал «вернуть», «разбить», «выбросить». Кажется, ничего не работает. Это просто продолжается с циклом. Если я попробую с ярлыком, я получаю сообщение об ошибке:

Uncaught SyntaxError: неопределенная метка «прорыв»

var r=0;
breakout:
for(i=0;i<5;i++) {
  setTimeout(function() {
    if(r) {
       alert("works");
    } else {
       throw new Error(alert("error"));
       break breakout;
    }
  }, 2000);
}

http://jsfiddle.net/hyc8j/1/


person user2035693    schedule 19.05.2013    source источник


Ответы (4)


Эта функция имеет задержку своего выполнения... Через 2 секунды цикл уже выполнил свои пять итераций. Вы должны поместить цикл внутри функции обратного вызова.

И просто спросить, что вы намерены с этим?

person Henrique Barcelos    schedule 19.05.2013
comment
Ну, это просто пример того, что я делаю. На самом деле у меня есть 3 цикла for и один цикл if, которые проверяют условие и, если это условие ложно, выполняют несколько функций, рассчитанных по времени. - person user2035693; 19.05.2013
comment
Вы должны понимать, что setTimeout является асинхронным, поэтому это не работает. - person Henrique Barcelos; 19.05.2013
comment
Если вам нужно повторить выполнение функции несколько раз, вы должны использовать setInterval вместо setTimeout и циклов. - person Henrique Barcelos; 19.05.2013

насколько работает перерыв внутри цикла for, он работает. Попробуйте чуть ниже. Оно работает

for (i=0;i<10;i++)
  {
  if (i==3)
    {
  alert("Got break");
    break;
    }
  alert("did not break");
  }

Это происходит потому, что setTimeout является асинхронной функцией. см. ссылку синхронное использование setTimeout в JavaScript

person M Sach    schedule 19.05.2013

Согласно моему пониманию вашего кода и вашего вопроса, я думаю, что мы не можем разорвать цикл по времени, и в вашем коде, если вы хотите разорвать цикл for, просто держите оператор break вне блока цикла по времени.

Пожалуйста, поправьте меня, если я ошибаюсь.

person rishikesh tadaka    schedule 19.05.2013

дайте имя вашему циклу тайм-аута.

тогда сделай это

var yourloop = ... 
clearTimeout(yourloop);

вы сломаете тайм-аут цикла с этим

person doniyor    schedule 19.05.2013