SetInterval因未知原因停止运行

时间:2014-09-15 08:41:21

标签: javascript settimeout setinterval

我每隔100ms使用setInterval刷新一次时钟显示,但在某些时候它会停止运行。

当我启动我的脚本时,它工作正常,但之后,时钟不再更新。我没有任何线索为什么和调试似乎很困难,这是在几十分钟后随机发生的。

我在另一个网页上运行脚本作为用户脚本,可能是相关的,或者可能出现了问题,比如某个停止我的脚本的非捕获异常,但到目前为止我在控制台中没有看到任何内容。 ..

我正在考虑使用SetTimeout调用自己,但我之前想问一下,也许你有一些很好的建议来调试或理解这个问题。

setInterval(function(){
    app.displayClock();
}, app.ensureMinMax(app.settings('CLOCK_DELAY_REFRESH'), 0, 1000));

函数调用:

/**
 * Display/refresh the displayed clock.
 */
app.displayClock = function(){
    app.waitForDOM(function(){
        var id = '__shared_clock';
        var idTime = '__shared_clock_text';
        var idForm = '__shared_clock_form';
        var $selector = $j('#container-top');

        if($selector.has('#'+id).length){
            // Retrieve existing element.
            $selector.has('#'+id).find('#'+idTime).html(app._getTime(
                true,
                parseInt($selector.find('#'+idForm).find('#__shared_clock_form_hours').val()),
                parseInt($selector.find('#'+idForm).find('#__shared_clock_form_minutes').val()),
                parseInt($selector.find('#'+idForm).find('#__shared_clock_form_seconds').val())
            ));
        }else{
            // Create main container, sub containers and bind events.
            $selector.append($j('<div/>', {
                id: id
            }));

            if(app.settings('DISPLAY_CLOCK_CALCULATOR')) {
                // Create area that contains a form.
                $selector.find('#' + id).append($j('<div/>', {
                    id: idForm,
                    html:// Inverse the order because there are floating!
                        '<input type="text" id="__shared_clock_form_seconds" size="3" style="float: right;color: whitesmoke;" tabindex="10002" placeholder="Sec" />'+
                        '<input type="text" id="__shared_clock_form_minutes" size="3" style="float: right;color: whitesmoke;" tabindex="10001" placeholder="Min" />'+
                        '<input type="text" id="__shared_clock_form_hours" size="3" style="float: right;color: whitesmoke;" tabindex="10000" placeholder="Hour" />'
                }));
            }

            // Create area that contains the time value.
            $selector.find('#'+id).append($j('<div/>', {
                id: idTime,
                style: 'float: right; margin-top: 8px; padding-right: 10px;',
                html: app._getTime()
            }));
        }
    });
};

代码非常大并且使用我不共享的功能,因为它们也很大并且使用功能......

基本上,setInterval调用是在主脚本中进行的。 waitForDom确保在加载DOM之前尝试更改它,不,使用通常的jQuery等待dom在这里不起作用。

0 个答案:

没有答案