Почему setTimeout такой непостоянный и полуфункциональный?

StackOverflow https://stackoverflow.com/questions/1992280

  •  22-09-2019
  •  | 
  •  

Вопрос

function load_result()
{
    $.getJSON( "http://somesite.com/loadresult.php", function(data) {
        if( data == undefined || data == null )
        {
            console.log( "no data" );
            clearTimeout( lr_timeout );
            lr_timeout = setTimeout( "load_result()", 2000 );
            return;
        }
        insert_result_price( data );
        clearTimeout( lr_timeout );
        lr_timeout = setTimeout( "load_result()", 50 * ( Math.random() * 10 ) );

    } );
}

и lr_timeout определяется глобально, и load_result функция запускается изначально в document.ready функция.Проблема в том, что функция выполняется не всегда.Я посмотрю это в Firebug, и у меня есть другая функция, установленная в setInterval, которая всегда работает.

Идеи?

Это было полезно?

Решение

Это ваш другой setTimeout функция (та, которая всегда работает) также внутри $.getJSON?Если да, вызывает ли он его по тому же URL-адресу (http://somesite.com/loadresult.php в вашем примере, но я уверен, что в реальной жизни все по-другому)?

Вполне возможно, что http://somesite.com/loadresult.php является ненадежным ресурсом, и ваши противоречивые результаты обусловлены этим ресурсом, а не setTimeout.Конечно, если они оба используют один и тот же ресурс, то это не может быть проблемой.

Другие советы

У меня никогда не возникало проблем с setTimeout в целом, и я использовал его для основного / бесконечного цикла в JS довольно много раз без каких-либо проблем.Я бы предположил, что clearTimeout из одного вызова load_results переходит в setTimeout из другого, тем более что это происходит в ответ на запрос GET, который может занять больше времени, чем требуется браузеру для перехода к следующему setTimeout.На самом деле здесь задействовано несколько потоков, у вас просто нет контроля над ними, и нет доступного механизма синхронизации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top