Firebug отладчик игнорировать setTimeout? Как это проверить? - PullRequest
1 голос
/ 23 марта 2012
Windows 7
Firefox 10.0.1

У меня есть простая логика setTimeout, которую я хочу проверить с помощью отладчика Firebug с несколькими точками останова.

test.js

console.log("one");   
setTimeout(function(){ console.log("hmm"); }, 5000);
console.log("two");   //breakpoint here
console.log("three");

test.html

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>

        <script type="text/javascript" src="../js/test.js" ></script>

    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

Используя Firebug debugger, я помещаю точку останова в закомментированную строку (где console.log ("two")), и когда я загружаю html-страницу, я получаю вывод:

one

и остановка процесса в точке останова, как и ожидалось, но setTimeout никогда не выполняется.

Это ошибка отладчика firebug?Кто-нибудь видел это раньше?

ОБНОВЛЕНИЕ:

Я исследую немного больше и обнаружил:

Если вы нажмете «продолжить» в режиме отладчика ипройти через точки останова в течение 5000 мс (что указано в setTimeout), появится сообщение "hmm".

Если вы остановитесь на точке останова более чем на 5000 мс, то сообщение "hmm" не будет отображаться даже после "продолжить ".

Ответы [ 4 ]

2 голосов
/ 18 января 2013

Это ошибка Firebug;)

Пожалуйста, изучите эту проблему .

1 голос
/ 23 марта 2012

У меня нет проблем с этим.Код внутри setTimeout выполняется через 5 секунд, поэтому ожидаемый результат будет

один

два

три

хммм

1 голос
/ 23 марта 2012

setTimeout срабатывает только после того, как поток выполнения Javascript становится свободным, даже если время истекло, когда поток занят. Установка точки останова просто приостанавливает поток, и он остается занятым, в то время как остановка на нем. Итак, этот код вернет

one
two 
three
hmmm //(in 5 seconds, if no breakpoint, at once if you stop at a breakpoint for more than 5 seconds and then run the code further)

Это правильное setTimeout поведение.

0 голосов
/ 02 марта 2017

Вы можете просто установить точку останова внутри обратного вызова для setTimeout и продолжить внутри нее шаг

...