2010-08-19 4 views
1

Ok, c'est une question très simple. En fait, je suis sûr à 90% que je connais la réponse, mais l'heure tardive me permet de l'espacer complètement. Je l'ai cherché sur SO et Google sans succès.Comment obtenir les données de retour du gestionnaire d'événements?

Comment obtenir des données de retour à partir d'une fonction de gestionnaire d'événements?

J'ai plusieurs nids de gestionnaires d'événements, et j'ai besoin d'obtenir le résultat du plus profond à la sortie principale.

Comme tant (pseudo-code):

mainFunction = function() { 

    attachToEvent('event1', function(e1) { 

     e.attachToEvent('event2', function(e2) { 
      return e2.status; 
     } 

    } 
} 

console.log(mainFunction()); 

Quel est le modèle approprié pour obtenir que les données de retour (e2.status) sur la console?

Encore une fois, je m'excuse pour la simplicité de cette question.

Merci

Répondre

3

Vous pouvez simplement vous connecter au gestionnaire d'événements ou passer un rappel dans la fonction principale.

mainFunction = function(callback) { 

    arg.attachToEvent('event1', function(e1) { 

     e.attachToEvent('event2', function(e2) { 
      callback(e2.status); 
     } 

    } 
} 

mainFunction(function (e) { console.log(e); }); 
+0

C'est tout! Merci Monsieur! – Spot

+0

Votre bienvenue :) – tarn

1

Ce n'est pas possible que console.log peut avaient été exécutés avant votre événement a été déclenché.

Voir cet exemple (je me sers d'une minuterie au lieu d'un événement)

var x = 1; 

setTimeout(function(){  
    x = 2;  
},1000) 

console.log(x);// x = 1 

En changeant le champ d'x vous pouvez utiliser console.log. Howerver comme vous pouvez le voir dans la plupart des cas, cela ne va pas aider

à votre question:

mainFunction = function() { 

    var returnValue; 

    attachToEvent('event1', function(e1) { 

     e.attachToEvent('event2', function(e2) { 
      returnValue = e2.status; 
     } 

    } 

    return returnValue; 
} 

console.log(mainFunction()); 
+0

Ok, par exemple, disons que ce n'est pas le cas. Comment le feriez-vous? – Spot

+0

L'événement est émis par un code tiers. Je n'ai aucun contrôle sur cela. – Spot

0

Au lieu de return e2.status ne pouvez pas vous écrire juste console.log(e2.status)?

+0

Par exemple, oui. Dans le code que je suis en train de travailler, non. La fonction principale est appelée par un morceau de code indépendant et nécessite une valeur de retour de l'appel. – Spot

Questions connexes