Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retour d'une fonction à l'intérieur d'une function

Tout ça en asynchrone

Sujet résolu
    1 août 2011 à 11:08:28

    Bonjour,
    je développe actuellement une extension Google Chrome. Il se trouve que pour communiquer entre les différents fichiers il faut utiliser un système de requêtes.
    function getVar(name){
    	retour = null;
    	chrome.extension.sendRequest({req: 'getVar'}, function(r){
    		console.log('retour');
    		if(!r.val){
    			retour = '';
    		} else {
    			retour = r.val;
    		}
    	});
    	
    	return retour;
    }
    


    J'aimerais que lorsque j'appelle getVar('unechaineici') cela me retourne le résultat du sendRequest() or avec la méthode utilisée ici le retour se fait avant de recevoir la réponse de la requette.

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      1 août 2011 à 11:14:03

      Ah bah tu peux pas en fait, tout simplement :p
      Il faut aborder le truc d'une autre manière, ou c'est ta fonction retour qui va déclencher un callback pour effectuer elle même l'action que tu voulais à la base. Tordu, mais obligatoire.
      • Partager sur Facebook
      • Partager sur Twitter
        1 août 2011 à 11:19:19

        Je ne vois pas trop ce que tu veux dire, mais j'ai l'impression que c'est galère (c'est pour zModo chrome)
        Parce que là, j'ai déjà une fonction callback, donc je pige pas :(

        EDIT : j'avais fait une erreur dans le code, mais ça ne change rien au problème.

        Un truc comme ça tu veux dire :
        function getVar(name){
        	retour = null;
        	chrome.extension.sendRequest({req: 'getVar'}, callRetour);
        	
                function callRetour(r){
        		console.log('retour');
        		if(!r.val){
        			retour = '';
        		} else {
        			retour = r.val;
        		}
        	}
        
        	return retour;
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          1 août 2011 à 11:29:27

          Non il faut voir plus loin que ton getVar. Par exemple :

          truc = getVar('truc');
          machin.bidule = truc;
          // suite ...
          
          // Devient :
          setter = function(truc) { machin.bidule = truc; }
          CallVar('truc', setter);
          
          // Et dans CallVar :
          function CallVar(name, callback){
          	retour = null;
          	chrome.extension.sendRequest({req: 'getVar'}, callRetour);
          	
                  function callRetour(r){
          		console.log('retour');
          		if(!r.val){
          			callback('');
          		} else {
          			callback(r.val);
          		}
          	}
          }
          


          Mon code n'est surement pas correct, mais j'espère qu'il fait passer mon idée :D

          edit : mais je me fais pas de soucis pour toi, Shivaan arrive ^^
          • Partager sur Facebook
          • Partager sur Twitter
            1 août 2011 à 11:30:23

            Plus un truc dans ce genre là :

            function getVar(name){
            	chrome.extension.sendRequest({req: 'getVar'}, callRetour);
            	
                    function callRetour(r){
            		console.log('retour');
            		if(!r.val){
            			traitements('');
            		} else {
            			traitements(r.val);
            		}
            	}
            }
            function traitements(data){
               // ici tes traitements à faire
            }
            


            PS: owned...
            • Partager sur Facebook
            • Partager sur Twitter
            Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
              1 août 2011 à 12:09:30

              Bon de ce fait j'ai changé un peu la structure, mais j'ai du mal là :
              countAlertes = {
              	'Membres' : 0,
              	'MP' 	  : 0,
              	'Forum'   : 0
              };
              
              getVar('alertes.membres.count', 'Membres');
              
              function getVar(name, varName){
              	chrome.extension.sendRequest({req: 'getVar'}, function(r){
              		if(!r.val){
              			callbackGetVar('', varName);
              		} else {
              			callbackGetVar(r.val, varName);
              		}
              	});
              }
              function callbackGetVar(val, varName){
              	countAlertes[varName] = val;
              }
              


              Comment faire pour injecter le contenu que j'arrive à avoir au niveau du callback dans une variable directement en fonction de son nom ? (Je pense que ça pique ce que j'ai écrit au dessus m'enfin bon...)

              EDIT : j'ai corrigé quelques petites choses qui piquaient sévère, mais ça bug toujours...
              • Partager sur Facebook
              • Partager sur Twitter

              Retour d'une fonction à l'intérieur d'une function

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown