Pregunta

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 ) );

    } );
}

y lr_timeout se define a nivel mundial y la función load_result se inició inicialmente en la función document.ready. El problema es que la función no siempre funciona. Voy a verlo en Firebug y tengo otra función que se ha configurado en un setInterval que siempre funciona.

Las ideas?

¿Fue útil?

Solución

Es el setTimeout otra función (la que siempre funciona), también dentro de un $.getJSON? Si es así, lo hace lo llaman en la misma URL (http://somesite.com/loadresult.php en su ejemplo, pero estoy seguro de que es diferente en la vida real)?

Es posible que http://somesite.com/loadresult.php es un recurso escamosa, y sus resultados inconsistentes se deben a ese recurso, no setTimeout. Por supuesto, si los dos están usando ese mismo recurso, entonces eso podría no ser el problema.

Otros consejos

Nunca he experimentado un problema con setTimeout general, y yo he utilizado para un bucle principal / infinito en JS unas cuantas veces sin que nunca tener un problema. Me imagino que clearTimeout de una invocación de load_results está pisando setTimeout de otro, especialmente porque es en respuesta a una petición GET que pueden llevar más tiempo del que se tarda el navegador para moverse a la siguiente setTimeout. De hecho, existen múltiples hilos pasando aquí, solo hay ningún control sobre ellos y no hay ningún mecanismo de sincronización disponibles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top