ciao, ho applicazione che deve fare il seguente:
1) ogni 1000ms chiamata ajax per eseguire query in db
2) se ajax ritorna un risultato, la funziona countdown() viene chiamata
3) ognivolta che la funzione countdown viene chiamata viene cancellato un eventuale timer pre-esistente e un nuovo timer viene fatto partire
4) le chiamate ajax (punto 1) devono continuare in background indipendentemente dal timer

Al momento il problema è che quando resetto il timer per il countdown (dentro la funziona countdown()) il setInterval iniziale (punto 1) si blocca. A me serve che continui invece a funzionare indipendentemente dal'altro countdown timer.

Grazie!

Questo è il codice. ho commentato la chiamata ajax per semplificare

codice:
$(document).ready(function() {
    $('#myLog').hide();

   //questo deve essere eseguito continuamente, per sempre
    setInterval(function(){setTimer(0);} , 1000);
});

function setTimer(){
    canvas = document.getElementById("myCanvas");
    log = document.getElementById("myLog");
    
   //chiamata per esempio
    countdown(5, 0);

    //$.ajax ({
    //    url: "ajax.php",
    //    success: function( result ) {
    //       countdown(result, 0);
    //    }
    //});

}

function countdown(minutes, seconds) {
    canvas.style.color = "black";
    canvas.innerHTML = "00:00";

   //reset countdown. funziona ma influisce anche su setInterval iniziale
    var id = window.setTimeout(null,0);
    while (id--)
        window.clearTimeout(id);

   //da qui in poi funziona tutto ok

    if(minutes == "OFF"){
        canvas.style.color = "#383838";
        canvas.innerHTML = "OFF";
        return;
    }

    var endTime, hours, mins, msLeft, time;

    function twoDigits( n )
    {
        return (n <= 9 ? "0" + n : n);
    }

    function updateTimer()
    {
        canvas.style.color = "black";
            canvas.innerHTML = "00:00"; //clear canvas
            msLeft = endTime - (+new Date);
            if ( msLeft < 1000 )                
                flashyText();
            else {
                canvas.style.color = "white";
                time = new Date( msLeft );
                hours = time.getUTCHours();
                mins = time.getUTCMinutes();
                canvas.innerHTML = (hours ? hours + ':' + twoDigits( mins ) : mins) + ':' + twoDigits( time.getUTCSeconds());
                setTimeout( updateTimer, time.getUTCMilliseconds() + 500 );
            }
        }

    endTime = (+new Date) + 1000 * (60*minutes + seconds) + 500;
    updateTimer();
}

function flashyText() {
    var count = 1000000,
    timer = setInterval(function() {
        count--;
        if( count%2 == 1) {
            canvas.style.color = "red";
            canvas.innerHTML = "00:00"
        }
        else {
            canvas.style.color = "black";
            canvas.innerHTML = "00:00";
        }
        if( count == 0) clearInterval(timer);
    },1000);
}