J'utilise des événements dans JQuery pour communiquer entre différents modules JavaScript. Ainsi, dans l'un des modules j'ai quelque chose comme ceci:JQuery - empêche le déclenchement de plusieurs événements
$(window).on('updateStatusRequest', function(ev) {
// Send updateStatus event after fetching data
data = fetchData();
$(window).trigger('updateStatus', data);
});
Et ces données peuvent potentiellement durer chercher longtemps (il envoie la requête HTTP en dehors) avant de terminer. Voici un problème auquel je pense maintenant: que se passe-t-il si beaucoup de 'updateStatusRequest' sont déclenchés et que la fonction n'a pas encore récupéré les données? Je veux éviter que plusieurs données va chercher dans ce cas, alors je pense à quelque chose comme ceci:
$(window).on('updateStatusRequest', function(ev) {
$(window).off('updateStatusRequest', this);
// Send updateStatus event after fetching data
data = fetchData();
$(window).trigger('updateStatus', data);
$(window).on('updateStatusRequest', this);
});
Je veux tourner le rappel au large lors de son exécution. Malheureusement, l'approche ci-dessus ne fonctionne pas. Quelle est la bonne façon de faire cela?
Hm ... « ' fetchData' prend beaucoup de temps » ... avant de continuer à ce sujet, pouvez-vous s'il vous plaît me assurer que vous n'utilisez les requêtes synchrones? – Katana314
J'utilise 'getJSON()' de JQuery pour récupérer des données, je n'ai pas trouvé dans sa documentation si elle est asynchrone ou non, mais je suppose que c'est en contact avec l'extérieur. – qiubit
Alternativement à la réponse de Howard, vous pouvez simplement enrouler le contenu de votre fonction dans une instruction if, qui vérifie une variable globale, if (! Fetching) {fetching = true; ...} et redéfinir fetching sur fetchData completion. – DrunkWolf