Ceci est principalement une question linguistique-agnostique.
Si j'attends que deux événements complètent (disons, deux événements IO ou des demandes HTTP), quel est le meilleur modèle pour y faire face. Une chose que je peux penser est la suivante (exemple pseudo JS). P>
request1.onComplete = function() { req1Completed = true; eventsCompleted(); } request2.onComplete = function() { req2Completed = true; eventsCompleted(); } eventsCompleted = function() { if (!req1Completed || !req2Completed) return; // do stuff }
4 Réponses :
JQuery 1.5 a différé: http://api.jquerery.com/category/deferred- objet / p>
Vous pouvez facilement les configurer pour rappeler uniquement lorsque certains événements ont été déclenchés. P>
Un "différé" est définitivement quelque chose à examiner. Il vous permet de créer une interface assez soignée pour suivre plusieurs rappels, quelque chose du long des lignes de après l'après-alinéa (DEF1, DEF2, DEF2, Fonction () {...}) CODE> ... Sauf si bien sûr jQuery a déjà quelque chose pour attendre plusieurs événements.
J'espère une solution générique, applicable à plusieurs langues.
Avant même d'entrer dans les détails, voici quelque chose de soigné qui profite des fonctions Lambda éteint le sommet de ma tête: Cela suppose évidemment que chaque événement se déclenche le plus une fois et ne 't Profitez de l'ordre. P> p>
Cette solution est meilleure si vous avez un nombre arbitraire d'événements que vous attendez, mais le fait que cela ne fonctionne que si les événements se produisent une fois i> est un peu dangereux.
C'est un peu slick. Un peu fou, mais maigre.
Pas une mauvaise solution; Celui-ci gagne, bien qu'une partie de moi sentent que c'est un peu une solution sale :)
Le gestionnaire des incendies d'événement d'abord effacera la vieille manutention de l'autre et attribuer un nouveau qui inclut les choses que vous devez faire après l'achèvement des deux événements. Parce que nous réaffectaons le second gestionnaire à l'intérieur du gestionnaire du premier événement (selon ce qui est), nous savons toujours que nous sommes terminés lorsque ce second gestionnaire finit. P> Essayez # 2 forte >: Voici quelque chose qui fonctionnera si chaque type d'événement est différent: p> par exemple, cela ne sera pas alerté "fait" jusqu'à ce que l'utilisateur ait à la fois défilé et cliqué sur: < / p> Fondamentalement, cela vérifie que deux rappels différents ont exécuté en stockant une référence à l'appel le plus récemment exécuté. Son utilisation est un peu maladroite, mais cela va faire le travail (c'est-à-dire que cela fonctionnera toujours si chacun des événements s'exécute plus d'une fois). P> P>
demande1 code> et
request2 code> regarder assez global pour moi
@Matti - Bien sûr qu'ils sont. Il est clair que je voulais dire qu'il ne nécessite pas de drapeaux globaux supplémentaires pour indiquer que chaque gestionnaire a fini.
Une façon de le faire: http://tobireif.com/posts/waitting_for_two_events/ << Pré> xxx pré>
la lib est chez https://github.com/kriskowal/q a>. p> p>
Vous attendez-vous que ces événements se produisent dans un ordre particulier? Qui affecte grandement la solution.