Comment mettre en place une serrure en JavaScript
Comment quelque chose d'équivalent à lock
en C# être implémenté en JavaScript?
Pour expliquer ce que je pense, un cas d'utilisation simple:
Utilisateur clique sur le bouton B
. B
soulève un événement onclick. Si B
est dans event-state
l'événement attend B
être dans ready-state
avant de se propager. Si B
est dans ready-state
, B
est verrouillé et est mis à event-state
, puis l'événement se propage. Lorsque l'événement est de propagation est complet, B
est fixé à ready-state
.
J'ai pu voir comment quelque chose de proche de ce qui peut être fait simplement en ajoutant et en supprimant la classe ready-state
à partir du bouton. Cependant, le problème est que l'utilisateur peut cliquer sur un bouton deux fois de suite, plus vite que la variable peut être définie, de sorte que cette tentative de verrouillage va échouer dans certaines circonstances.
Personne ne sait comment mettre en œuvre un verrou qui ne manquera pas d'en JavaScript?
- Des réponses qui prennent en compte parallèle JS exécution (c'est à dire comme dans IE9) serait appréciée.
- Donc, vous voulez arrêter temporairement le courant de la propagation de l'évènement jusqu'à ce que la propagation d'un événement précédent est terminé. Je ne pense pas que cela peut être fait. Vous pouvez faire ceci: permet d'annuler l'événement, puis le feu une autre lors de la manifestation précédente a fini de se propager.
- J'ai seulement entendu dire IE9 essaie d'utiliser un dédié de base pour la compilation, rien au sujet de l'exécution en parallèle, pouvez-vous citer une source?
- JavaScript est mono-thread en dehors de des web workers. Web les travailleurs ne devrait pas exiger un verrouillage de la solution à mettre en place.
- Chakra moteur interprète, compile et exécute le code en parallèle et profite de plusieurs cœurs de PROCESSEUR, lorsqu'il est disponible." -- msdn.microsoft.com/en-us/ie/ff468705.aspx
- Que peut signifier, comme vous le suggérez, parallèle au moteur de rendu, plutôt que parallèle à lui-même.
- Connexes: stackoverflow.com/questions/6266868/...
Vous devez vous connecter pour publier un commentaire.
Lock est une idée discutable en JS qui est destiné à être threadless et n'ayant pas besoin de la simultanéité de protection. Vous êtes à la recherche de combiner des appels sur l'exécution différée. Le modèle que j'ai suivi pour ce qui est de l'utilisation de rappels. Quelque chose comme ceci:
Vous pouvez également mettre en place cette aide DOM écouteurs d'événement ou un pubsub solution.
JavaScript est, avec très peu d' exceptions (
XMLHttpRequest
onreadystatechange
gestionnaires dans certaines versions de Firefox) événement-boucle simultanées. Donc pas besoin de vous soucier de verrouillage dans ce cas.Plus de liens sur l'événement de la boucle de la concurrence, voir E
Les verrous sont un concept nécessaire dans un environnement multi-thread système. Même avec les threads de travail, des messages sont envoyés par la valeur entre les travailleurs, de sorte que le verrouillage n'est pas nécessaire.
Je soupçonne que vous devez juste mettre un sémaphore (snr) entre vos boutons.
J'ai eu du succès mutex-la promesse.
Je suis d'accord avec les autres réponses que vous pourriez ne pas avoir besoin de verrouillage dans votre cas. Mais ce n'est pas vrai que l'on n'a jamais besoin de verrouillage en Javascript. Vous avez besoin de mutuelle exclusivité lors de l'accès à des ressources externes qui ne gèrent pas de simultanéité.
Pourquoi ne pas vous désactivez le bouton et l'activer à la fin de l'événement?
Codage heureux !!!
Certains plus JoshRiver de répondre en fonction de mon cas;
Il y aura un appel d'api et de ces deux fonction consommer même résultat.