Sont des appels à des méthodes Javascript thread-safe ou de la synchronisation?

Je suis encore nouveau pour le Javascript. Je suis l'élaboration d'une simple page où je clique sur un bouton de l'extraction de la valeur d'une servlet et l'affiche. Il fonctionne bien, sauf si je clique comme un fou sur le bouton. Parfois, le résultat est null.

Je me demande si cela est causé par des appels simultanés à la même fonction suivante:

function loadXMLDoc2(retr) {
    var xmlhttp;
    if (window.XMLHttpRequest) {
        //code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            $("#" + retr).button('option', 'label', xmlhttp.responseText);
            //document.getElementById(retr).innerHTML=xmlhttp.responseText;
        }
    }
    var param = "cmd=" + encodeURIComponent(retr);
    document.getElementById("TOP_LEFT").innerHTML = param;
    xmlhttp.open("GET","/WebFront/Asynclet?" + param,true);
    xmlhttp.send(null);
}

Javascript est thread-safe? Et si non, comment puis-je synchroniser ou d'isoler les appels à cette méthode?

Je pense que la plupart des navigateurs essayer de prévenir des conditions de course. Je ne vois pas de synchronisation de blocs ou de tel dans du JavaScript, il est conçu pour être facile (et mono-thread).

OriginalL'auteur Jérôme Verstrynge | 2011-10-23