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
Vous devez vous connecter pour publier un commentaire.
Autres que web HTML5 travailleurs (qui sont très étroitement contrôlé), Javascript est mono-thread, donc il n'y a pas de problèmes avec la sécurité des threads. Un thread d'exécution sera fini avant la prochaine est commencé.
Des choses comme les réponses ajax passer par une file d'attente d'événements et de ne les exécuter que lorsque toute autre thread d'exécution est terminée.
Voir Dois-je être concerné avec des conditions de course avec Javascript asynchrone? pour plus d'info.
Pour une discussion spécifique de l'ajax réponse rappels voir Comment JavaScript gérer les réponses AJAX dans le fond?.
OriginalL'auteur jfriend00
Dans le contexte d'un navigateur, JavaScript est essentiellement mono-thread. (Il y a certaines nouvelles fonctionnalités du navigateur qui fournissent une sorte de modèle de thread, mais au fil des interactions sont très limitées et les données ne peuvent pas être directement partagés.)
OriginalL'auteur Pointy